2016-06-10 67 views
0

我有一個對象列表,我可以用這句話添加記錄:Lambda表達式不在對象列表中工作

List<DragerClass.Alarm> alarms = new List<DragerClass.Alarm>(); 
public void createAlarm(int i, int[] alarms) 
{ 
    alarms.Add(new DragerClass.Alarm(i, DateTime.Now, DragerClass.Dedector.Dedector_Name[i] + " UNDER RANGE"))`; 
} 

但是,當我嘗試刪除一個項目,它的行爲就像lambda表達式不支持:

public void removeAlarm(int i) 
{ 
    alarms.Remove(x => x.Dedector_No == i); 
} 

我看到消息時,我站在代碼

不能轉換lambda表達式類型 「Drager_GasDedection.DragerClass.Alarm」,因爲它不是委託 型

我使用Visual Studio 2010和我在引用也加入System.Data.Entity。但還是一樣。謝謝你的幫助。

+0

@ASh我現在試着用RemoveAll,現在這條消息是''Drager_GasDedection.DragerClass.Alarm'不包含'Dedector_No'的定義,也沒有接受類型'Drager_GasDedection'的第一個參數的擴展方法'Dedector_No'。 DragerClass.Alarm'可以找到(你是否錯過了一個使用...) – CanESER

+0

我認爲你需要'alarms.RemoveAt(i);' –

+0

「我」是項目的數量而不是列表的索引,所以RemoveAt沒有幫助@MikeDebela – CanESER

回答

2

看看methods of List<T>。方法Remove(T)只需要一個元素。如果在列表中找到它,則將其刪除,否則不做任何事情。 Remove不尋找它會檢查的Predicate<T>

RemoveAll(Predicate<T>)然而,預計一個謂詞。所以,你需要撥打:

 
alarms.RemoveAll(x => x.Dedector_No == i); 

你也必須改變===在你的代碼,因爲否則你正在執行任務,而不是一個平等的檢查。此外請注意,該方法將刪除所有報警與給定的探測器號碼,而不只是第一個。

+1

在那個列表中,每個dedector最多可以有一個鬧鐘,所以刪除所有並不是問題,對'='抱歉實際上是我想輸入的內容,即時修復 – CanESER