How to initialize KeyValuePair object the proper way?
我在(和其他人一样)这个问题中看到,人们想知道如何初始化keyValuePair的实例,它预期应该是这样的。
1 2 3 4 5 |
它不起作用,好像属性不在那里。intead,我需要使用这样的构造函数。
1 |
不可否认,更短的语法,但我不能使用初始值设定项,这让我很困扰。我做错什么了?
您没有错,必须使用
1 |
不能使用对象初始化语法ie key=1,value=2的原因是key和value属性没有setter-only getter(它们是只读的)。所以你甚至不能这样做:
1 | keyValuePair.Value = 1; // not allowed |
好的,你知道答案了。作为替代方案,我更喜欢类似于
1 2 3 4 5 6 7 | public static class KeyValuePair { public static KeyValuePair<K, V> Create<K, V>(K key, V value) { return new KeyValuePair<K, V>(key, value); } } |
所以变短了:
1 | var keyValuePair = KeyValuePair.Create(1, 2); |
字典具有压缩初始值设定项:
1 2 3 4 5 6 7 8 9 | var imgFormats = new Dictionary<string, ChartImageFormat>() { {".bmp", ChartImageFormat.Bmp}, {".gif", ChartImageFormat.Gif}, {".jpg", ChartImageFormat.Jpeg}, {".jpeg", ChartImageFormat.Jpeg}, {".png", ChartImageFormat.Png}, {".tiff", ChartImageFormat.Tiff}, }; |
在本例中,我使用的字典将文件扩展名与图表对象的图像格式常量相关联。
单个keyValuePair可以从字典中返回,如下所示:
1 | var pair = imgFormats.First(p => p.Key ==".jpg"); |
键和值属性没有setter。这就是为什么你不能在初始值设定项中使用它们。只需使用构造函数:)就可以了。
下面举一个例子来做这个工作
1 |
你没有做错什么。KeyValuePairs属性是只读的。你不能设置它们。此外,没有空的默认构造函数。您需要使用提供的构造函数。
键和值属性是只读的,因此不能在对象初始值设定项中使用它们。
请参见C编程指南中的此条目。