2016-06-10 4 views
0

Ich habe eine Objektliste, und ich kann mit diesem Satz Datensatz hinzufügen:Lambda Ausdruck funktioniert nicht in Objektliste

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"))`; 
} 

Aber wenn ich versuchen, ein Element zu entfernen, verhält es sich wie Lambda-Ausdruck nicht unterstützt siehe

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

ich diese Nachricht, wenn ich auf dem Code stehen

kann nicht Lambda-Ausdruck umwandeln eingeben: ‚Drager_GasDedection.DragerClass.Alarm‘, weil es nicht ein Delegierter Typ ist

Ich bin mit Visual Studio 2010 und fügte ich auch System.Data.Entity in Referenzen. Aber immer noch gleich. Danke für jede Hilfe.

+0

@ASh Ich versuchte das mit RemoveAll jetzt und die Nachricht ist dies jetzt "'Dräger_GasDedection.DragerClass.Alarm' enthält keine Definition für 'Dedector_No' und keine Erweiterungsmethode 'Dedector_No' akzeptiert ein erstes Argument vom Typ 'Dräger_GasDedection. DrägerClass.Alarm 'könnte gefunden werden (Sie vermissen eine Verwendung ...) – CanESER

+0

Ich denke, Sie brauchen 'alarms.RemoveAt (i);' –

+0

"i" ist die Nummer des Elements nicht der Liste, so RemoveAt ist nicht hilfreich @MikeDebela – CanESER

Antwort

2

Werfen Sie einen Blick auf die methods of List<T>. Die Methode Remove(T) erwartet einfach ein Element. Wenn es in der Liste gefunden wird, wird es entfernt, ansonsten wird nichts unternommen. Remove ist nicht auf der Suche nach einem Predicate<T>, dass es überprüfen wird.

RemoveAll(Predicate<T>) erwartet jedoch ein Prädikat. Sie müssen also nennen:

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

Sie müssen auch =-== da sonst in Ihrem Code ändern Sie eine Zuweisung statt einer Gleichheitsprüfung durchführen. Beachten Sie außerdem, dass die Methode alle Alarme mit der angegebenen Meldernummer entfernt, nicht nur die erste.

+1

In dieser Liste kann jeder Dedektor maximal einen Alarm haben, also alles entfernen ist kein Problem und sorry für '=' es war eigentlich das, was ich eingeben wollte, jetzt bin ich dran – CanESER