title: list.add seems to be adding a reference to the original object?
body: <p>I have created a couple custom classes (<code>NTDropDown</code> and <code>NTBaseFreight</code>) which I use to store data that I retrieve from a DB. I initialize a List of <code>NTBaseFreight</code> and 2 lists for <code>NTDropDown</code>. </p>
  
  <p>I can successfully use <code>List.Add</code> to add freights to the freights list, but as I debug the code, my 2 dropdown lists contain only 1 <code>NTDropDown</code>, which always has the same values as <code>NTDropDown</code> (I'm assuming this is a referencing problem, but what am I doing wrong)?</p>
  
  <p>To give an example, on the second row, if the carrier and <code>carrier_label</code> were <code>"001", "MyTruckingCompany"</code> and I put a break on the if statement for <code>frt_carriers</code>, both frt_carriers and frt_modes would contain only 1 item in their list, with the values <code>"001", "MyTruckingCompany"</code>...the same values in <code>NTDropDown</code>.</p>
  
  <p>Code:</p>
  
  <pre><code>List&lt;NTDropDown&gt; frt_carriers = new List&lt;NTDropDown&gt;();
  List&lt;NTDropDown&gt; frt_modes = new List&lt;NTDropDown&gt;();
  List&lt;NTBaseFreight&gt; freights = new List&lt;NTBaseFreight&gt;();
  NTDropDown tempDropDown = new NTDropDown();
  NTBaseFreight tempFreight = new NTBaseFreight();
  
  //....Code to grab data from the DB...removed
  
  while (myReader.Read())
  {
      tempFreight = readBaseFreight((IDataRecord)myReader);
  
      //check if the carrier and mode are in the dropdown list (add them if not)
      tempDropDown.value = tempFreight.carrier;
      tempDropDown.label = tempFreight.carrier_label;
      if (!frt_carriers.Contains(tempDropDown)) frt_carriers.Add(tempDropDown);
  
      tempDropDown.value = tempFreight.mode;
      tempDropDown.label = tempFreight.mode_label;
      if (!frt_modes.Contains(tempDropDown)) frt_modes.Add(tempDropDown);
  
      //Add the freight to the list
      freights.Add(tempFreight);
  }
  </code></pre>