我有一个班级
var dst = ds.Tables[0].AsEnumerable()
.Select(s => new MatchAddress
{
Name = s.Field<String>("officename").Trim().ToLower(),
Pincode = Convert.ToString(s.Field<double>("pincode")).Trim(),
Taluka = s.Field<String>("Taluk").Trim(),
District = s.Field<String>("Districtname").Trim(),
Rank = 0f
})
.ToList();
我使用此类创建了新列表,如下所述
List<MatchAddress> lm;
我还初始化了新列表dst
现在我将lm
列表分配给lm = dst ;
foreach (MatchAddress ma in lm)
{
if (ma.Name == "xyz")
{
ma.Pincode = null;
}
}
,如下所示
Pincode
确保列表lm
的属性null
设置为lm
,其中name =“XYZ”。
因此列表lm
更新并将pincode字段设置为空。
但我的问题是为什么列表lm也会更新列表dst的结果。
和dst
列表还在列表dst
中设置了pincode null。
我们将lm
列表克隆到lm
,那么为什么列出Date.parse
会更改列表dst ??
我知道这背后的理由不是为什么会发生这种情况,如果你知道的话请现在就让我来。
我不想回答这个问题
答案 0 :(得分:1)
List是引用类型数据。但如果你愿意,你可以制作克隆。这是
的简单扩展方法static class Extensions
{
public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
{
return listToClone.Select(item => (T)item.Clone()).ToList();
}
}
答案 1 :(得分:0)
因为List是引用类型数据。 lm和dst都指向相同的数据。如果您希望两个列表都独立,则可以执行以下操作:
List<MatchAddress> lm = dst.ConvertAll(address => new MatchAddress(Name = address.Name, Pincode = address.Pincode, Taluka= address.Taluka, District = address.District, Rank = address.Rank));