0

我需要保留颜色/浮点/浮点三元组的列表和字典。我没有定义一个具有三个属性 ( ) 的小类,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>>

4

1 回答 1

4

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

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

于 2014-08-14T06:08:42.073 回答