Đây là một câu hỏi cũ, nhưng tôi nghĩ tôi đã đưa vào câu trả lời C # 6 của mình. Tôi thường phải thiết lập dữ liệu thử nghiệm dễ dàng nhập mã dưới dạng danh sách các bộ dữ liệu. Với một vài chức năng mở rộng, có thể có định dạng nhỏ gọn, đẹp mắt này mà không cần lặp lại tên trên mỗi mục.
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 });
Điều này cung cấp một IEnumerable - nếu bạn muốn một danh sách mà bạn có thể thêm vào thì chỉ cần thêm ToList ().
Phép thuật đến từ tiện ích mở rộng tùy chỉnh Thêm phương thức cho bộ dữ liệu, như được mô tả tại 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...
}
Điều duy nhất tôi không thích là các loại được tách ra khỏi tên, nhưng nếu bạn thực sự không muốn tạo một lớp mới thì phương pháp này vẫn sẽ cho phép bạn có dữ liệu có thể đọc được.
new[] { new{ Id = (int?)null, Name = "Foo" }, new { Id = (int?)1, Name = "Foo" }}