gpt4 book ai didi

c# - SortedList<> 及其奇怪的 setter

转载 作者:行者123 更新时间:2023-11-30 22:01:07 31 4
gpt4 key购买 nike

我最初有一些代码,简化后看起来像这样:

var planets = new List<Planet>
{
new Planet {Id = 1, Name = "Mercury"},
new Planet {Id = 2, Name = "Venus"},
};

我遇到了一个场景,列表被同时填充,但读取速度不够快。因此,我将其更改为使用 SortedList。

后来我意识到我可以这样重写

var planets = new SortedList<int, Planet>
{
{1, new Planet {Id = 1, Name = "Mercury"}},
{2, new Planet {Id = 2, Name = "Venus"}},
//in my actual code, i am reading the ids from a db
};

但在我采用这种方法之前,我的代码是这样写的

var planets = new SortedList<int, Planet>
{
Keys = {1, 2},
Values =
{
new Planet {Id = 1, Name = "Mercury"},
new Planet {Id = 2, Name = "Venus"},
}
};

这给了我这个异常(exception)

System.NotSupportedException: This operation is not supported on SortedList
nested types because they require modifying the original SortedList.
at System.ThrowHelper.ThrowNotSupportedException(ExceptionResource resource)
at System.Collections.Generic.SortedList`2.KeyList.Add(TKey key)

我发现这很奇怪,因为恕我直言,我并没有像它声称的那样真正修改“原始 SortedList”,它在谈论什么“嵌套类型”?它是 SortedList 内部的 key 列表吗? ?

然后我看到 KeysValues SortedList 中的属性实际上没有二传手。它们是只读属性,但我没有收到编译时错误。我可以进行 set 调用,正如我在堆栈跟踪中看到的 KeyList.Add .我觉得失败的唯一原因是因为 SortedList 中的显式检查,这对我来说似乎很奇怪!

例如 var str = new String {Length = 0};正如预期的那样给我一个编译时错误,因为 Length 是一个只读属性,planets.Keys = null; 也是如此。

有人请告诉我 - 我在这里忽略了什么简单的事实?

最佳答案

您编写的代码与此类似:

var planets = new SortedList<int, Planet>();
planets.Keys.Add(1);
planets.Keys.Add(2);
planets.Values.Add(new Planet { Id = 1, Name = "Mercury" });
planets.Values.Add(new Planet { Id = 2, Name = "Venus" });

SortedList要求您通过 SortedList<TKey, TValue>.Add(TKey key, TValue value) 同时添加值和键方法,以便它可以按键对值进行排序。 IList<T>的实现用于 KeysValues内部不支持通过 IList<T>.Add(T value) 独立添加相应的键或值方法。

您应该能够通过调用 Keys.Add(...) 来重现此错误或 Values.Add(...)

关于c# - SortedList<> 及其奇怪的 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036242/

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