这是一个老问题,但是我想我应该填写C#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()。
魔术来自用于元组的自定义扩展Add方法,如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" }}