虽然Stackoverflow上有几篇关于此类问题的帖子,但我已经查看了它们并且没有找到解决我问题的方法。
在代码中,我将浏览一个带有foreach循环的列表列表,并将创建的元素添加到另一个列表中。虽然在foreach循环中每次迭代都给出一个唯一值,但在它之外的值是相同的。
try
{
List<Takeoff> takeoffs = new List<Takeoff>();
List<List<String>> itemTable = queryTable("TK_ITEM", 52);
foreach (List<String> row in itemTable)
{
// Second element in the constructor is Name.
Takeoff takeoff = new Takeoff(row.ElementAt(0), row.ElementAt(3), row.ElementAt(11),
row.ElementAt(17), row.ElementAt(25), row.ElementAt(33),
row.ElementAt(37), row.ElementAt(45));
MessageBox.Show(row.ElementAt(3)); // Each iteration gives an unique value.
takeoffs.Add(takeoff);
}
// Values of both objects are the same.
MessageBox.Show(takeoffs[0].Name);
MessageBox.Show(takeoffs[1].Name);
return takeoffs;
}
catch (Exception)
{
MessageBox.Show("No material takeoff created!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return null;
}
我尝试了各种添加和显示值的方法,但到目前为止,我还没有找到可行的解决方案。
有人能指出我的问题所在吗?
编辑:起飞声明
/*...*/
private static string name;
/*...*/
public Takeoff(string id, string name, string guid, string width, string height, string area, string volume, string count)
{
/*...*/
Name = name;
/*...*/
}
/*...*/
public string Name
{
get { return name; }
set { name = value; }
}
/*...*/
答案 0 :(得分:8)
您的name
支持字段是静态的:
private static string name;
不要这样做。只需删除static
修饰符,就没有必要。
Static members属于类型,而不是实例。这意味着Takeoff
的所有实例都共享name
的相同值,无论最后分配的值是什么。