使用KeyValuePair的KeyValuePair字典比T字典更低吗?

时间:2014-08-14 06:03:26

标签: c# performance list dictionary keyvaluepair

我需要保留Color / float / float三元组的列表和字典。我不是使用三个属性(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;

或将上面的List传递给LINQ查询的效果低于List<KeyValuePair<Color,myClass>>

1 个答案:

答案 0 :(得分:4)

您应该注意的唯一区别是,KeyValuePair<TKey, TValue>不是一个类。这是一个结构。这意味着当你传递它时它将采取不同的行动。这可能没关系,但你应该记住这一点。您还应该记住,KeyValuePair<TKey, TValue>是不可变的,因此一旦创建就无法更改它。您可以使用不同的键/值创建新的。

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