我有结构
struct User
{
public int id;
public Dictionary<int, double> neg;
}
List<User> TempUsers=new List<users>();
List<User> users = new List<User>();
我的问题是,当我运行此代码时
TempUsers=users.ToList();
TempUsers[1].neg.Remove(16);
用户的否定字典aslo删除值为16的
答案 0 :(得分:5)
这是因为Dictionary
是引用类型。你应该clone,样本:
class User : IClonable
{
public int Id { get; set; }
public Dictionary<int, double> Neg { get; set; }
public object Clone()
{
// define a new instance
var user = new User();
// copy the properties..
user.Id = this.Id;
user.Neg = this.Neg.ToDictionary(k => k.Key,
v => v.Value);
return user;
}
}
您不应在此类型中使用struct
。 In this link, there is a good explanation关于何时以及如何使用结构。
答案 1 :(得分:2)
Dictionary是一种引用类型。你应该克隆你的字典: 这是一个例子:
struct User : ICloneable
{
public int id;
public Dictionary<int, double> neg;
public object Clone()
{
var user = new User { neg = new Dictionary<int, double>(neg), id = id };
return user;
}
}