我需要保留一个颜色/浮动/浮动三位一体的列表和字典。我不是用三个属性(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>>性能差?
发布于 2014-08-14 06:08:42
您应该注意到的唯一不同是,KeyValuePair<TKey, TValue>不是一个类。这是一种结构。这意味着当你把它传递出去时,它的行为会有所不同。也许没关系,但你应该记住这一点。您还应该记住,KeyValuePair<TKey, TValue>是不可变的,所以一旦创建就不能更改它。您可以使用不同的键/值创建新的。
你应该重新考虑你的设计。无论是介绍您自己的简单POCO,还是使用Tuple<T1, T2>,似乎都要比使用KeyValuePair<TKey, TValue>更好,因为您的数据实际上没有任何键值关系。这只是一组你想一起处理的值。Tuple正是为此而设计的。
https://stackoverflow.com/questions/25301065
复制相似问题