Có thể thực hiện điều đó trong C# không?Đang khởi tạo Hàng đợi bằng {a, b, c} có thể trong C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
hoặc tôi có phải tạo ra mảng trước tiên không?
Có thể thực hiện điều đó trong C# không?Đang khởi tạo Hàng đợi bằng {a, b, c} có thể trong C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
hoặc tôi có phải tạo ra mảng trước tiên không?
Không, bạn không thể khởi tạo hàng đợi theo cách đó.
Dù sao, bạn có thể làm một cái gì đó như thế này:
var q = new Queue<string>(new[]{ "A", "B", "C" });
và điều này, rõ ràng, có nghĩa là đi qua một mảng.
Như Queue<T>
không thực hiện một phương pháp 'Thêm', bạn sẽ cần phải nhanh chóng một IEnumerable<string>
mà từ đó nó có thể được khởi tạo:
Queue<string> helperStrings
= new Queue<string>(new List<string>() { "right", "left", "up", "down" });
Có thể làm điều đó trong C#?
Thật không may là không.
Quy tắc cho bộ khởi tạo bộ sưu tập trong C# là đối tượng phải (1) triển khai IEnumerable và (2) có phương thức Thêm. Bộ sưu tập initializer
new C(q) { r, s, t }
được viết lại như
temp = new C(q);
temp.Add(r);
temp.Add(s);
temp.Add(t);
và sau đó dẫn đến bất cứ thứ gì trong temp.
Queue<T>
triển khai IEnumerable nhưng không có phương thức Thêm; nó có một phương pháp Enqueue.
Cảm ơn lời giải thích đó, điều đó giúp ích rất nhiều trong việc hiểu các cơ chế cơ bản. – xeophin
Vì vậy, bộ lọc intializers về cơ bản là cú pháp đường, phải không? – digEmAll
@digEmAll: đó là chính xác. Vị ngọt của đường ở đây gấp đôi. Đầu tiên, chúng rất nhỏ gọn. Thứ hai, rằng họ biến những gì trước đây có thể là một loạt các phát biểu thành một biểu thức; điều đó có nghĩa là bạn có thể sử dụng chúng trong các bối cảnh mà chỉ một biểu thức là hợp lệ, chẳng hạn như trình khởi tạo trường hoặc truy vấn LINQ. –
+1 Có, bạn tạo một mảng trước, nhưng có vẻ đẹp :) – Onkelborg
Được rồi ... đã quá tiện lợi để trở thành sự thật;) Cảm ơn! – xeophin
Phương pháp này có yêu cầu unboxing các chuỗi không? Sẽ 'Danh sách mới {"A", "B", "C"} 'có tốt hơn không? –