Каждый ищет первое значение во всем списке записей. не может быть применен к оператору типа method group и bool

#c# #.net #linq

#c# #.net #linq

Вопрос:

Я не уверен, как написать этот linq express, но я пытаюсь взять список объектов / записей и найти первое истинное значение и установить свойство.

 var test = recordList.First(s => s.myObject.isTrueValue == true);
  

isTrueValue имеет следующее значение

public поверх bool IsTrueValue() { возвращает true}

при сборке я получаю следующую ошибку

операция «==» не может быть применена к оператору типа method group и bool

То, что я пытаюсь сделать, это просмотреть каждую запись в списке и найти первое поле isTrueValue, равное true.

Комментарии:

1. является ли s.MyObject.isTrueValue свойством или методом?

2. var test = список записей. Где(s => s.MyObject.isTrueValue == true);

3. == true в любом случае не должен быть записан. Он всегда избыточен и не передает никакой полезной информации.

4. @KonradRudolph: Просто для ясности, это всегда избыточно, когда LHS имеет тип bool . Я довольно часто пишу это, когда LHS имеет тип bool? .

5. @JonSkeet Справедливое замечание, но мне тоже не нравится писать это с обнуляемыми значениями, поскольку в общем использовании этот шаблон практически всегда является синтаксическим шумом. Поэтому я предпочитаю явно разворачивать значение null ( Value или GetValueOrDefault() ).

Ответ №1:

isTrueValue это метод, поэтому вы забыли скобки. Кроме того, как заявил Конрад Рудольф, isTrueValue() всегда возвращает true, поэтому вам не нужно == true выражение:

 var test = recordList.First(s => s.myObject.isTrueValue());
  

Ответ №2:

Можете сказать мне, какой тип данных isTrueValue. isTrueValue должно иметь тип Boolean для сравнения с true.

Попробуйте это и дайте мне знать, работает ли это для вас.

 var test = recordList.Where(s => s.myObject.isTrueValue == true).First();
  

Комментарии:

1. В сообщении об ошибке четко указано, что тип isTrueValue является method group

2. Обратите внимание, что ответы не должны использоваться для получения дополнительной информации. Я понимаю, что у вас еще недостаточно репутации, чтобы комментировать, но это не значит, что вместо этого уместно использовать ответы … это просто означает, что вам нужно подождать, пока другие зададут вопросы, в основном.