trong ứng dụng Silverlight 4 của tôi, tôi có một ObservableCollection trong đó bao gồm các đối tượng của một lớp và được xác định bởi một giao diện:Sử dụng Lambda biểu trên một ObservableCollection
interface myInterface()
{
string Name { get; set; }
string Value { get; set; }
}
class myClass() : myInterface
{
...
}
ObservableCollection<myInterface> _collection;
Trước khi thêm một yếu tố mới cho bộ sưu tập, tôi muốn đảm bảo rằng Tên-Thuộc tính không tồn tại trong các phần tử sưu tập hiện tại. Vì tôi không thể làm việc với chứa, tôi hiện đang lặp qua tất cả các phần tử và kiểm tra từng phần tử theo cách thủ công.
private bool CollectionContainsElement(string name2CheckAgainst)
{
foreach (myInterface item in _collection)
if (item.Name.Equals(name2CheckAgainst))
return true;
return false;
}
Tôi đã đọc rằng điều này cũng có thể đạt được thông qua một biểu thức Lambda, vì vậy tôi đã viết như sau:
if (!_collection.Contains(p => p.Name == name2CheckAgainst))
{
...
Nhưng bây giờ tôi nhận được một lỗi, nói rằng "biểu thức lambda không thể được chuyển thành Kiểu "myInterface", vì nó không có kiểu đại biểu ". (Từ ngữ có thể khác nhau, khi tôi dịch từ phiên bản tiếng Đức)
Tôi không chắc chắn những gì tôi phải thay đổi để làm cho nó hoạt động. using System.Linq;
được bao gồm. Và câu hỏi thứ hai (hoặc có thể là câu hỏi chính): tôi đã đọc, rằng thời gian chạy thay đổi từ O (1) cho phương thức Contains() thành O (n) - không nhanh hơn kiểm tra hiện tại của tôi. Vì vậy, nó thậm chí có ý nghĩa để thay đổi nó để sử dụng lambda? Và cuối cùng, có lẽ có một phương pháp khác trong việc kiểm tra một Tên-Tài sản hiện có trong lớp của tôi không?
Cảm ơn trước,
Frank
cảm ơn rất nhiều, có vẻ như tôi đã đọc sai ví dụ về lamda trong phương thức chứa. Sử dụng Any là hiển nhiên :) – Aaginor