2010-11-18 4 views
6

Это кажется простой задачей, но я, похоже, не в состоянии выработать правильный синтаксис. Сейчас у меня это:Инициализация массива KeyValuePair

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

Однако, это похоже на работу:

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

Но я не знаю размер массива изначально. Я знаю, что могу использовать список KVP, и, вероятно, буду, но я просто хотел узнать, как это сделать.

+2

Есть ли причина, по которой вы не используете словарь? ... или это теоретический вопрос об инициализации массивов? – Bobby

+1

Это теоретический вопрос, но у меня также будут повторяющиеся записи. –

+0

Если вам нужна функция поиска, и вам нужно обрабатывать несколько значений для каждого ключа, вы можете рассмотреть использование класса System.Linq.Lookup . Тем не менее, это неизменно. Дополнительная информация: http://msdn.microsoft.com/en-us/library/bb460184.aspx –

ответ

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

Смежные вопросы