gpt4 book ai didi

c# - 从另一个集合中访问结构集合属性

转载 作者:太空狗 更新时间:2023-10-30 01:22:56 24 4
gpt4 key购买 nike

我有一个需要存储在集合中的结构。该结构有一个返回字典的属性。

public struct Item
{
private IDictionary<string, string> values;
public IDictionary<string, string> Values
{
get
{
return this.values ?? (this.values = new Dictionary<string, string>());
}
}
}

public class ItemCollection : Collection<Item> {}

测试时我发现,如果我将项目添加到集合中,然后尝试访问字典,structs values 属性永远不会更新。

 var collection = new ItemCollection { new Item() }; // pre-loaded with an item
collection[0].Values.Add("myKey", "myValue");
Trace.WriteLine(collection[0].Values["myKey"]); // KeyNotFoundException here

但是,如果我先加载该项目,然后将其添加到集合中,值字段将得到维护。

 var collection = new ItemCollection();
var item = new Item();
item.Values.Add("myKey", "myValue");
collection.Add(item);
Trace.WriteLine(collection[0].Values["myKey"]); // ok

我已经确定结构是这种类型的错误选项,并且在使用类时不会发生问题,但我很好奇这两种方法之间有什么不同。任何人都可以解释发生了什么吗?

最佳答案

改为将结构更改为类:

public class Item {}

现在我不太熟悉内部结构,但是结构是值类型,类是引用类型,我相信其中的逻辑可以解释为什么在运行第一个代码示例时出现异常.

我希望有人能介入并给你一个更彻底的答案,但现在,只需将结构更改为一个类。

关于c# - 从另一个集合中访问结构集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12491771/

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