Це давнє запитання, але я думав, що я поставив би свою відповідь С # 6. Мені часто доводиться встановлювати тестові дані, які легко вводяться в код як список кортежів. За допомогою декількох функцій розширення можна отримати цей приємний, компактний формат, не повторюючи імена на кожному записі.
var people= new List<Tuple<int, int, string>>() {
{1, 11, "Adam"},
{2, 22, "Bill"},
{3, 33, "Carol"}
}.Select(t => new { Id = t.Item1, Age = t.Item2, Name = t.Item3 });
Це дає IEnumerable - якщо ви хочете список, до якого ви можете додати, просто додайте ToList ().
Магія походить від спеціального розширення Додати методи для кортежів, як описано на веб-сторінці https://stackoverflow.com/a/27455822/4536527 .
public static class TupleListExtensions {
public static void Add<T1, T2>(this IList<Tuple<T1, T2>> list,
T1 item1, T2 item2) {
list.Add(Tuple.Create(item1, item2));
}
public static void Add<T1, T2, T3>(this IList<Tuple<T1, T2, T3>> list,
T1 item1, T2 item2, T3 item3) {
list.Add(Tuple.Create(item1, item2, item3));
}
// and so on...
}
Єдине, що мені не подобається, це те, що типи відокремлені від імен, але якщо ви дійсно не хочете складати новий клас, то такий підхід все одно дозволить вам мати читабельні дані.
new[] { new{ Id = (int?)null, Name = "Foo" }, new { Id = (int?)1, Name = "Foo" }}