使用C#在struct中定义Dictionary

时间:2015-02-18 18:21:47

标签: c#

我有结构

    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的

2 个答案:

答案 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;
    }
}

您不应在此类型中使用structIn 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;
    }
}