使用此 KeyValuePair 的 KeyValuePair 字典的性能是否低于 T 字典

本文关键字:KeyValuePair 字典 是否 性能 | 更新日期: 2023-09-27 18:17:51

我需要保留颜色/浮动/浮动三元组的列表和字典。 我没有定义一个具有三个属性(myClass.Color, myClass.FloatValue1, myClass.FloatValue2(的微小类,而是简单地使用:

List<KeyValuePair<Color, KeyValuePair<float, float>>> myList;
Dictionary<Color,KeyValuePair<float,float>> myDict; 

以及访问以下值:

float f = myDict[Color.Red].Key.Key;
float j = myDict[Color.Red].Key.Value;

除了看起来有点奇怪的访问之外,我在这里遭受了任何性能打击吗?是否有任何理由相信上面的词典性能低于

Dictionary<Color,myClass> myDict;

或者将上面的列表传递给 LINQ 查询的性能不如List<KeyValuePair<Color,myClass>>

使用此 KeyValuePair 的 KeyValuePair 字典的性能是否低于 T 字典

你应该

注意的唯一区别是KeyValuePair<TKey, TValue>不是一个类。这是一个结构。这意味着当您传递它时,它会有不同的行为。这可能无关紧要,但您应该记住这一点。您还应该记住,KeyValuePair<TKey, TValue>是不可变的,因此一旦创建,您就无法更改它。您可以只创建具有不同键/值的新键/值。

您可能应该重新考虑您的设计。无论是引入你自己的简单POCO,还是使用Tuple<T1, T2>似乎比usign KeyValuePair<TKey, TValue>更好,因为你的数据实际上没有任何键值关系。它只是一组要一起处理的值。 Tuple就是为此而设计的。