我需要保留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>>
?
答案 0 :(得分:4)
您应该注意的唯一区别是,KeyValuePair<TKey, TValue>
不是一个类。这是一个结构。这意味着当你传递它时它将采取不同的行动。这可能没关系,但你应该记住这一点。您还应该记住,KeyValuePair<TKey, TValue>
是不可变的,因此一旦创建就无法更改它。您可以使用不同的键/值创建新的。
你应该重新考虑你的设计。引入您自己的简单POCO或使用Tuple<T1, T2>
似乎比使用KeyValuePair<TKey, TValue>
更好,因为您的数据实际上没有任何键值关系。它只是您想要一起处理的一组值。 Tuple
专为此而设计。