Самый короткий встроенный инициализатор коллекции? С#

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

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

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

В настоящее время я получил

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

Im надеясь, что С# 4.0 будет что-то пропущено.

Ответы

Ответ 1

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

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

Ответ 2

немного меньше места там, если вы используете 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") };

Ответ 3

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

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

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