使用Lambda表達式,我也由一個類的對象,並通過接口定義一個ObservableCollection:在我的Silverlight 4應用一個ObservableCollection
interface myInterface()
{
string Name { get; set; }
string Value { get; set; }
}
class myClass() : myInterface
{
...
}
ObservableCollection<myInterface> _collection;
添加新的元素添加到集合之前,我希望確保Name-Property在當前集合元素中不存在。 由於我無法使用包含,我目前遍歷所有元素並手動檢查每個元素。
private bool CollectionContainsElement(string name2CheckAgainst)
{
foreach (myInterface item in _collection)
if (item.Name.Equals(name2CheckAgainst))
return true;
return false;
}
我已閱讀,這也可以通過Lambda表達式來實現,所以我寫了以下內容:
if (!_collection.Contains(p => p.Name == name2CheckAgainst))
{
...
但現在我得到一個錯誤,他說,「lambda表達式不能轉換爲類型「myInterface」,因爲它不是委託類型「。 (措辭可能不同,因爲我從德語版本翻譯)
我不知道我必須改變以使其工作。包括using System.Linq;
。第二個問題(或者主要問題):我已經讀過,運行時從Contains()方法的O(1)變爲O(n) - 這不會比我當前的檢查更快。那麼將它改爲使用lambda還是有意義的嗎?最後,在我的班級中是否有另一種方法來檢查現有的Name-Property?
由於提前,
弗蘭克
千恩萬謝,貌似我已經誤讀的例子枝條在含有法的LAMDA。使用Any顯然是:) – Aaginor