Cách tốt nhất để nhận giá trị từ ICollection là gì? Chúng tôi biết Bộ sưu tập trống ngoài việc đó.C# ICollection nhận được giá trị đơn
Trả lời
Cách đơn giản nhất để làm điều này là:
foreach(object o in collection) {
return o;
}
Nhưng điều này không phải là đặc biệt hiệu quả nếu nó thực sự là một bộ sưu tập chung vì IEnumerator thực hiện IDisposable, vì vậy trình biên dịch có để đưa vào một thử/cuối cùng, với một Dispose() gọi trong khối cuối cùng.
Nếu đó là một bộ sưu tập không chung chung, hoặc bạn biết bộ sưu tập chung thực hiện không có gì trong phương thức Dispose() của nó, thì sau đây có thể được sử dụng:
IEnumerator en = collection.GetEnumerator();
en.MoveNext();
return en.Current;
Nếu bạn biết nếu có thể thực hiện IList, bạn có thể thực hiện việc này:
IList iList = collection as IList;
if (iList != null) {
// Implements IList, so can use indexer
return iList[0];
}
// Use the slower way
foreach (object o in collection) {
return o;
}
Tương tự như vậy, nếu có khả năng nó sẽ thuộc loại định nghĩa của riêng bạn, bạn có thể sử dụng cùng một kỹ thuật.
Nếu không có Generics và vì ICollection
cụ IEnumerable
bạn có thể làm như trong ví dụ 1. Với Generics bạn đơn giản cần phải làm như ví dụ 2:
List<string> l = new List<string>();
l.Add("astring");
ICollection col1 = (ICollection)l;
ICollection<string> col2 = (ICollection<string>)l;
//example 1
IEnumerator e1 = col1.GetEnumerator();
if (e1.MoveNext())
Console.WriteLine(e1.Current);
//example 2
if (col2.Count != 0)
Console.WriteLine(col2.Single());
LINQ, baby, yeah ...
var foo = myICollection.OfType<YourType>().FirstOrDefault();
// or use a query
var bar = (from x in myICollection.OfType<YourType>() where x.SomeProperty == someValue select x)
.FirstOrDefault();
FirstOrDefault được định nghĩa trên ICollection hoặc IEnumerable (không chung chung)? Ở đâu? Điều gì sẽ làm việc mặc dù: myICollection.OfType
Đúng, cập nhật. Cảm ơn. – Will
Đây là câu trả lời đúng. Đầu tiên và FirstOrDefault thậm chí sử dụng tối ưu hóa IList nội bộ nếu có thể. –
.
collection.ToArray()[i]
Bằng cách này là chậm, nhưng rất đơn giản để sử dụng
- 1. nhận được giá trị từ C# enums
- 2. Nhận đơn giá trị từ Wordpress
- 3. Ruby - nhận được giá trị của băm
- 4. Nhận giá trị từ tra cứu C#
- 5. Nhận giá trị của datarow trong C#
- 6. Nhận giá trị Request.Headers
- 7. Thực hiện phân tách giá trị đơn C++
- 8. Datagridview chọn toàn bộ hàng nhưng nhận được giá trị ô đơn
- 9. Cách tạo giá trị băm ngắn đơn giản? C#
- 10. Thêm vào một ICollection
- 11. vim nhận được giá trị hiện tại của vim foldmarker
- 12. nhận được nhiều giá trị nhóm từ mysql
- 13. Làm thế nào để nhận được giá trị từ đối tượng, với giá trị mặc định
- 14. Nhận giá trị DateTimeOffset từ SQL 2008 đến C#
- 15. Nhận giá trị giữa các dấu ngoặc nhọn C#
- 16. Xác nhận cho các giá trị ô Datagridview trong C#
- 17. C# enum array chấp nhận giá trị sai
- 18. Nhận giá trị từ html đầu vào trong codebehind C#
- 19. (extjs) Nhận giá trị được chọn của nút radio dưới dạng. Không trả lại giá trị
- 20. Không thể nhận được giá trị từ cookie trong Java. Giá trị chứa dấu phẩy.
- 21. Cách nhận giá trị Spinner?
- 22. JSON giá trị với dấu nháy đơn
- 23. Nhận giá trị thả xuống
- 24. Nhận Hidden Giá trị trường
- 25. Cách nhận giá trị eq()?
- 26. nhận giá trị từ DataTable
- 27. JQuery - Nhận giá trị chọn
- 28. Mục tiêu-C, Làm thế nào tôi có thể nhận được giá trị của một UITextField?
- 29. C# chuỗi mảng nhận được chỉ có 10 giá trị đầu tiên
- 30. nhận được giá trị từ các tế bào Ẩn trong asp.net GridView C# sử dụng onrowdatabound
dụ 2 không phải là đúng vì ICollection không thực hiện phương pháp đơn(). –
Đây là một phương pháp mở rộng LINQ. Hãy xem tại msdn doc: http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx –