我创建了一些自定义类(NTDropDown
和NTBaseFreight
),用于存储从数据库中检索的数据。我为NTBaseFreight
初始化了NTDropDown
和2个列表。
我可以成功使用List.Add
向货运清单添加货运,但在我调试代码时,我的2个下拉列表只包含1个NTDropDown
,其总值与{{1}相同(我假设这是一个引用问题,但我做错了什么)?
举一个例子,在第二行,如果运营商和NTDropDown
是carrier_label
并且我在"001", "MyTruckingCompany"
的if语句上放了一个中断,则frt_carriers和frt_modes都包含列表中只有1个项目,值为frt_carriers
... "001", "MyTruckingCompany"
中的值相同。
代码:
NTDropDown
答案 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添加到列表中的确切方法。