Причина того, что делает ваш код не работа пишется в How to: Initialize a Dictionary with a Collection Initializer (C# Programming Guide):
A Dictionary contains a collection of key/value pairs. Its Add method takes two parameters, one for the key and one for the value. To initialize a Dictionary, or any collection whose Add method takes multiple parameters, enclose each set of parameters in braces...
Таким образом, в синтаксисе
{
{ "enabled", "enable", "enabling" },
}
Компилятор ожидающей свою коллекцию, чтобы a Add(string, string, string)
метод. Поскольку такой метод отсутствует на List<string []>
, ваша компиляция не выполняется.
На самом деле, можно создать такую коллекцию и инициализировать ее с помощью этого синтаксиса.Если вы создаете следующую коллекцию:
public class TripleCollection<T> : IEnumerable<Tuple<T, T, T>>
{
readonly List<Tuple<T, T, T>> list = new List<Tuple<T, T, T>>();
public void Add(T first, T second, T third)
{
list.Add(Tuple.Create(first, second, third));
}
public IEnumerator<Tuple<T, T, T>> GetEnumerator()
{
return list.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Ниже будет успешно компилировать и создать коллекцию с одной 3-кортежем:
var tuples = new TripleCollection<string>
{
{ "1", "2", "3" },
};
Вы также можете сделать следующее List
подкласса:
public class ListOfArray<T> : List<T[]>
{
public new void Add(params T[] args)
{
base.Add(args);
}
}
И инициализируйте его желаемым синтаксисом:
var synonyms = new ListOfArray<string>
{
{ "enabled", "enable", "enabling" },
{ "disabled", "disable", "disabling" },
{ "s0", "s0 state" },
{ "s5", "s5 state" }
};
Но List<string []>
, как и другие отметили, что вам нужно инициализировать список синонимов, явно выделяя каждую string []
записи, а не с помощью неявного сбора intializer для каждой записи:
var synonyms = new List<string[]>
{
new [] { "enabled", "enable", "enabling" },
new [] { "disabled", "disable", "disabling" },
new [] { "s0", "s0 state" },
new [] { "s5", "s5 state" }
};
Вы рассматриваете свою коллекцию в словарь вместо списка. –
Словари могут содержать только пару, я хочу иметь больше пары, если необходимо – dukevin
В этом случае вам может понадобиться какой-то пользовательский класс модели, который берет ваше левое значение, например. s0 или s5, и в этой пользовательской модели добавляют синонимы, которые являются списком строк. То, что у вас на данный момент, не сработает. –