Самый короткий встроенный инициализатор коллекции? C # - PullRequest
15 голосов
/ 23 августа 2011

Какой самый удобный / краткий способ я могу написать встроенный инициализатор коллекции?

Меня не волнуют ссылочные имена, с индексами все в порядке, и элемент нужно использовать только в рамках метода.

Я думаю, что коллекция анонимных типов будет более сложной, потому что мне придется каждый раз писать имя ключа.

У меня сейчас есть

var foo = new Tuple<int, string, bool>[] 
{ 
   new Tuple<int, string, bool>(1, "x", true), 
   new Tuple<int, string, bool>(2, "y", false) 
};

Надеюсь, в c # 4.0 будет что-то, что я пропустил.

Ответы [ 3 ]

17 голосов
/ 23 августа 2011

Самое короткое, что вы можете получить, это использовать Tuple.Create вместо new Tuple:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) };
5 голосов
/ 23 августа 2011

немного меньше места, если вы используете Tuple.Create(1,"x",true) вместо новой вещи - и вы можете удалить new Tuple<tint, string, bool> перед массивом:

var foo = new [] { Tuple.Create(1, "x", true), Tuple.Create(2, "y", false) };

или возьми это:

Func<int, string, bool, Tuple<int, string, bool>> T = (i, s, b) => Tuple.Create(i,s,b);
var foo = new [] { T(1, "x", true), T(2, "y", false) };

или даже

Func<int, string, Tuple<int, string, bool>> T = (i, s) => Tuple.Create(i,s,true);
Func<int, string, Tuple<int, string, bool>> F = (i, s) => Tuple.Create(i,s,false);
var foo = new [] { T(1, "x"), F(2, "y") };
0 голосов
/ 10 марта 2015

Вы также можете добавить

using MyTuple= System.Tuple<int, string, bool>;

в конце ваших using объявлений и затем используйте MyTuple вместо более длинной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...