gpt4 book ai didi

c#: Dictionary TryGetValue 创建实例而不是获取引用

转载 作者:行者123 更新时间:2023-11-30 20:27:16 25 4
gpt4 key购买 nike

我完全是个 C# 菜鸟,无法弄清楚为什么相同的方法以不同的方式工作。我正在制作一个简单的电子表格应用程序,并使用单元格字典,其中键是字符串名称,值是 Cell 对象:

public struct Cell
{
private string Name { get; }
public Object Content { get; set; }

public Cell(string n, Object o)
{
Name = n;
Content = o;
}
}

现在,我需要能够轻松地添加/更改单元格的内容,所以我一直在这样做:

Dictionary<string, Cell> cells = new Dictionary<string, Cell>();

// Assign new cell to 5.0 & print
cells.Add("a1", new Cell("a1", 5.0));
Console.WriteLine(cells["a1"].Content); // Writes 5

// Assign cell to new content & print
cells.TryGetValue("a1", out Cell value);
value.Content = 10.0;
Console.WriteLine(cells["a1"].Content); // Writes 5
Console.ReadKey();

当然,字典创建 新单元格很好,但是当我使用 TryGetValue 时,单元格的新内容并没有进入我试图获取的实际对象。我原以为第二次打印是 10。在调试中,它似乎实例化了一个新的单元格,而不是获取手头单元格的引用。

我以前使用过字典,并且使用过 TryGetValue 来更改现有对象的属性。所以这里有两个问题:在这种情况下我做错了什么,以及哪些因素决定该方法是否返回引用?

最佳答案

Cellstruct .不建议您使用 struct对于可以修改的对象。我想您刚刚发现了原因。

TryGetValue返回 struct , 它把它复制到 value ,这是一个不同的 structDictionary中的那个.

想象一下,如果您替换了 struct通过 int - 另一种值类型 - 您是否希望分配给 int来自 TryGetValue更改 Dictionary条目 int

如果其他约束要求您使用 struct ,您将需要更新 cells Dictionary与新 struct ,就像您使用任何其他值类型一样:

Dictionary<string, Cell> cells = new Dictionary<string, Cell>();

// Assign new cell to 5.0 & print
cells.Add("a1", new Cell("a1", 5.0));
Console.WriteLine(cells["a1"].Content); // Writes 5

// Assign cell to new content & print
cells.TryGetValue("a1", out Cell value);
value.Content = 10.0;
cells["a1"] = value; // update cells Dictionary
Console.WriteLine(cells["a1"].Content); // Writes 5
Console.ReadKey();

关于c#: Dictionary TryGetValue 创建实例而不是获取引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com