I have a simple class:
private class ColumnAndValue
{
private string columnName;
private string columnValue;
public string ColumnName
{
get { return columnName; }
set { columnName = value.Trim(); }
}
public string ColumnValue
{
get { return columnValue; }
set { columnValue = value.Trim(); }
}
}
And a list of that class:
private List<ColumnAndValue> cvList = new List<ColumnAndValue>();
Here's where my problem comes in, when I try to load the list my values come out all the same. Here's how I'm loading it:
public void TestList()
{
ColumnAndValue cv = new ColumnAndValue();
cv.ColumnName = "Column 1";
cv.ColumnValue = "Value 1";
cvList.Add(cv);
cv.ColumnName = "Column 2";
cv.ColumnValue = "Value 2";
cvList.Add(cv);
cv.ColumnName = "Column 3";
cv.ColumnValue = "Value 3";
cvList.Add(cv);
cv.ColumnName = "Column 4";
cv.ColumnValue = "Value 4";
cvList.Add(cv);
List<string> c1 = new List<string>();
c1 = cvList.Select(c => c.ColumnName).ToList();
foreach (object obj in c1)
{
Console.WriteLine(obj.ToString());
}
}
When I run this code I get four iterations of:
Column 4
Column 4
Column 4
Column 4
When I step into each cvList.Add while debugging, the first iteration shows cvList with the right information, the 2nd both values have Column 2 ... So, I tried it like this:
ColumnAndValue cv1 = new ColumnAndValue();
ColumnAndValue cv2 = new ColumnAndValue();
ColumnAndValue cv3 = new ColumnAndValue();
ColumnAndValue cv4 = new ColumnAndValue();
cv1.ColumnName = "Column 1";
cv1.ColumnValue = "Value 1";
cvList.Add(cv1);
cv2.ColumnName = "Column 2";
cv2.ColumnValue = "Value 2";
cvList.Add(cv2);
cv3.ColumnName = "Column 3";
cv3.ColumnValue = "Value 3";
cvList.Add(cv3);
cv4.ColumnName = "Column 4";
cv4.ColumnValue = "Value 4";
cvList.Add(cv4);
And everything comes out as expected:
Column 1
Column 2
Column 3
Column 4
My question is, how do I fill the list while only using one instance of cv?