2010-11-18 59 views
6

这似乎是一个简单的事情要做,但我似乎无法制定出正确的语法。目前,我有这样的:初始化一个KeyValuePair数组

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string,string>[]; 

然而,这似乎工作:

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string,string>[10]; 

但我不知道该数组的大小最初。我知道我可以使用KVP列表,而且我可能会这样做,但我只是想知道如何实现这一点。

+2

有没有原因你没有使用'Dictionary' ...或者这是关于数组初始化的理论问题? – Bobby 2010-11-18 07:52:21

+1

这是一个理论问题 - 但我也会有重复的条目。 – 2010-11-18 07:54:54

+0

如果您想要查找功能并且您需要处理每个键的多个值,则可以考虑使用System.Linq.Lookup 类。它是不可改变的。更多信息:http://msdn.microsoft.com/en-us/library/bb460184.aspx – 2010-11-18 08:02:17

回答

8

不,你不能这样做 - 因为数组总是有固定的大小。如果您没有指定这个尺寸,那么您希望使用的尺寸是多少?你要么必须指定大小本身的内容(它允许推断大小)。例如:

int[] x = new int[10]; // Explicit size 
int[] y = new int[] { 1, 2, 3, 4, 5 }; // Implicit size 
int[] z = { 1, 2, 3, 4, 5 }; // Implicit size and type 

List<T>绝对是您的朋友收藏,你不知道大小下手。

7

为什么不情愿使用

List<KeyValuePair<string, string>> 

看一看List Class

1

这个怎么样?

var kvpArr = new List<KeyValuePair<string,string>>(); 
6

按照定义,数组是固定大小的。您可以指定大小为你的第二个代码示例,或者你可以把它从初始化推断:

KeyValuePair<string, string>[] kvpArr = new KeyValuePair<string, string>[] 
{ 
    new KeyValuePair<string, string>(...), 
    new KeyValuePair<string, string>(...), 
    ... 
} 

如果你想有一个可变长度的结构,我建议你用List<T>

有关数组的更多信息,请参见C# programming guide

+0

你错过了一个分号:) – 8bitcartridge 2016-01-07 23:26:48