2016-06-10 1 views
0

У меня есть список объектов, и я могу добавить запись с этой фразой:лямбда-выражения не работают в списке объектов

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

Но когда я пытаюсь удалить элемент, он ведет себя так, как лямбда-выражение не поддерживает :

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

Я вижу это сообщение, когда я стою на коде

не может преобразовать лямбда-выражения к типу «Drager_GasDedection.DragerClass.Alarm», потому что это не делегат типа

Я использую Visual Studio 2010, и я также добавил System.Data.Entity в ссылках. Но все равно. Спасибо за любую помощь.

+0

@ASh Я попробовал это с помощью RemoveAll сейчас, и теперь это сообщение «Drager_GasDedection.DragerClass.Alarm» не содержит определения для «Dedector_No» и никакого метода расширения «Dedector_No», принимающего первый аргумент типа «Drager_GasDedection». DragerClass.Alarm 'можно найти (если вы не используете ...) – CanESER

+0

Я думаю, вам нужно 'alarms.RemoveAt (i);' –

+0

«i» - это номер элемента, а не индекс списка, поэтому RemoveAt не помогает @MikeDebela – CanESER

ответ

2

Взгляните на methods of List<T>. Метод Remove(T) просто ожидает один элемент. Если он найден в списке, он удаляется, иначе ничего не делается. Remove не ищет Predicate<T>, который будет проверять.

RemoveAll(Predicate<T>) однако ожидает предикат. Таким образом, вам необходимо позвонить:

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

Вы также должны изменить = к == в вашем коде, так как в противном случае вы выполняете задание вместо проверки равенства. Кроме того, обратите внимание, что метод удалит все сигналы тревоги с данным номером детектора, а не только первым.

+1

В этом списке у каждого детектора может быть максимум один будильник, поэтому удалить все не проблема и извините за '=', это было на самом деле то, что я хотел напечатать, im fixing now – CanESER