繁体   English   中英

无法更新列表C#中的单个项目(对象)

[英]Cannot update a single item (object) in a List C#

我有一个对象列表:

List<NPortfolio> Portfolios = new List<NPortfolio>();
Portfolios.Add(new NPortfolio(1, "1", emptyPositions));
Portfolios.Add(new NPortfolio(2, "2", emptyPositions));

现在,我想在修改其属性的对象上调用方法:

Portfolios[0].UpdatePositions(db.GetPortfolio(1, Today));

方法是这样的:

public void UpdatePositions(Dictionary<string, double> valuepairs)
    {
        foreach (var k in this.positions.Keys.ToList())
        {
            if (valuepairs.ContainsKey(k))
                this.positions[k] = valuepairs[k];
        }
    }

这可行,但是问题是当我尝试仅更新列表的第一项时:

Portfolios[0].UpdatePositions(db.GetPortfolio(1, Today));

列表中的所有项目均已更新!!! 我找不到所有项目都更新的原因,不仅是项目0,还无法找到。请帮助,这确实令人头疼

非常感谢

类定义:

public class NPortfolio
{
    public string p_id { get; set; }
    public int p_nr { get; set; }
    private Dictionary<string, double> positions;
    public NPortfolio(int nr, string id, Dictionary<string, double> pos)
    {
        p_nr = nr;
        p_id = id;
        positions = pos;
    }

    public void UpdatePositions(Dictionary<string, double> valuepairs)
    {
        foreach (var k in this.positions.Keys.ToList())
        {
            if (valuepairs.ContainsKey(k))
                this.positions[k] = valuepairs[k];
        }
    }
    public Dictionary<string, double> getPositions()
    {
            return positions;
    }
}

问题是从这里

Portfolios.Add(new NPortfolio(1, "1", emptyPositions));
Portfolios.Add(new NPortfolio(2, "2", emptyPositions));

您要将相同的字典传递给这两个类,因此,如果您修改其中一个类,则会同时修改两个实例。

您必须在NPortfolio的构造函数中创建一个新词典,以便每个类都有一个唯一的副本。

public NPortfolio(int nr, string id, Dictionary<string, double> pos)
{
    p_nr = nr;
    p_id = id;
    positions = new Dictionary<string, double>(pos);
}

这将使字典浅表复制 ,现在应该可以解决您的问题。

您要将同一个字典传递给对象。 因此,当您一次更新时,您最终会看到另一处的更改。 您应该在构造函数中创建一个新字典,并使用传入的值填充它。

public NPortfolio(int nr, string id, Dictionary<string, double> pos)
{
    p_nr = nr;
    p_id = id;
    positions = new Dictionary<string, double>(pos);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM