Tôi có một danh sách tĩnh lớn về cơ bản là một bảng tra cứu, vì vậy tôi khởi tạo bảng trong mã.Sử dụng cú pháp trình khởi tạo bộ sưu tập trên các loại tùy chỉnh?
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem() { Param1 = 1, Param2 = 2, Param3 = 3 Param4 = 4 },
new LookupItem() { Param1 = 5, Param2 = 6, Param3 = 7 Param4 = 8 },
//etc
}
}
Các thực LookupItem
có nhiều tài sản hơn, vì vậy tôi đã thêm một constructor để cho phép một định dạng khởi động nhỏ gọn hơn:
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
public LookupItem(int param1, int param2, float param3, float param4)
{
Param1 = param1;
Param2 = param2;
Param3 = param3;
Param4 = param4;
}
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem(1, 2, 3, 4),
new LookupItem(5, 6, 7, 8),
//etc
}
}
Những gì tôi thực sự muốn làm là sử dụng bộ sưu tập initialiser định dạng cho chính đối tượng để tôi có thể loại bỏ các new LookupItem()
trên mọi dòng. ví dụ:
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
//etc
}
Điều này có thể? Tôi thích nghĩ rằng đó là vì KeyValuePair
của một Dictionary<>
có thể được khởi tạo theo cách này.
MSDN Hoa:
Collection initializers cho phép bạn chỉ định một hoặc yếu tố hơn intializers khi bạn khởi tạo một lớp bộ sưu tập mà thực hiện IEnumerable. Trình khởi tạo phần tử có thể là một giá trị đơn giản, biểu thức hoặc trình khởi tạo đối tượng. Bằng cách sử dụng bộ khởi tạo bộ sưu tập , bạn không phải chỉ định nhiều cuộc gọi đến phương thức Thêm của lớp trong mã nguồn của bạn; trình biên dịch thêm các cuộc gọi.
Điều này có nghĩa là tôi cần triển khai IEnumerable
trên lớp LookupItem
của tôi và trả lại từng thông số? Mặc dù lớp của tôi không phải là lớp tập hợp.
Tuyệt vời. Cảm ơn nhiều. – GazTheDestroyer