list.add似乎是在添加对原始对象的引用?

时间:2012-11-07 18:22:17

标签: c# list

我创建了一些自定义类(NTDropDownNTBaseFreight),用于存储从数据库中检索的数据。我为NTBaseFreight初始化了NTDropDown和2个列表。

我可以成功使用List.Add向货运清单添加货运,但在我调试代码时,我的2个下拉列表只包含1个NTDropDown,其总值与{{1}相同(我假设这是一个引用问题,但我做错了什么)?

举一个例子,在第二行,如果运营商和NTDropDowncarrier_label并且我在"001", "MyTruckingCompany"的if语句上放了一个中断,则frt_carriers和frt_modes都包含列表中只有1个项目,值为frt_carriers ... "001", "MyTruckingCompany"中的值相同。

代码:

NTDropDown

2 个答案:

答案 0 :(得分:11)

是的,引用类型列表实际上只是一个引用列表。

您必须为要存储在列表中的每个对象创建一个新实例。

此外,Contains方法比较引用,因此包含相同数据的两个对象不被视为相等。在列表中的对象属性中查找值。

if (!frt_carriers.Any(c => c.label == tempFreight.carrier_label)) {
  NTDropDown tempDropDown = new NTDropDown {
    value = tempFreight.carrier,
    label = tempFreight.carrier_label
  };
  frt_carriers.Add(tempDropDown);
}

答案 1 :(得分:4)

tempDropDown在整个循环中是同一个对象。如果要添加多个实例,则需要创建它的新实例。

我很难弄清楚你在尝试将tempDropDown添加到列表中的确切方法。