title: Should I make my object properties nullable or use the CLR default values for each type?
body: <p>I have been trying to figure out the best way to handle default values.  Setting a ID value to 0 makes sense, but if it is a money value or other that is not initially set, when you encounter it later in your code, it is impossible to tell if it has been set or was set to 0.  If a money value is set to null, then you know it has not been set.  Additionally, when dealing with the database, it is simple to know if you need to write a null value to a field vs trying to figure out if it is supposed to be null or not.  </p>
  
  <p>What is the accepted way to handle this? </p>
  
  <pre><code>Class MyModel
  {
      public int Id {get;set;}
      public string Title {get;set;}
      public DateTime CreatedDate {get;set;}
      public bool IsActive {get;set;}
  
      //CLR will automatically set these values
      Public MyModel()
      {
          Id = 0; 
          Title = String.Empty;
          CreatedDate = "1/1/0001";
          IsActive = false;
      }
  }
  </code></pre>
  
  <p>vs</p>
  
  <pre><code>Class MyModel
  {
      public int? Id {get;set;}
      public string Title {get;set;}
      public DateTime? CreatedDate {get;set;}
      public bool? IsActive {get;set;}
  
      //CLR will automatically set these values
      Public MyModel()
      {
          Id = null; 
          Title = null;
          CreatedDate = null;
          IsActive = null;
      }
  }
  </code></pre>