У меня есть сценарий, где мне нужно запросить объект, и если null возвращается, тогда мне нужно запросить один и тот же объект по-другому, я решил использовать нуль-коалесцирующий оператор, вот код:FirstOrDefault неожиданный результат при смешивании с нулевым коалесцирующим оператором
var requestedMaterials = request.Lines.FirstOrDefault(
w => w.Description.Trim() == material.Description.Trim() &&
w.Grade.Grades.Any(q => q.Quantity > 0)) ??
request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Quantity > 0)
левый операнд должен вернуть нуль, правая рука не так, на самом деле, если установить его в переменной я могу видеть его не нулевой, но по какой-то причине , когда я использую оба запроса таким образом, requestMaterials имеет значение null, а не имеет значение правого операнда.
Я подтвердил, что, когда я задал эти два запроса для переменных и использовал '??' оператор на них, он работает так, как ожидалось, я оставил его таким образом на данный момент, но мне действительно интересно, почему это не сработало по-другому.
Рабочий пример (requestedMaterials заполняется с materialsWithoutGrade):
var materialsWithGrade = request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Grade.Grades.Any(q => q.Quantity> 0));
var materialsWithoutGrade = request.Lines.FirstOrDefault(w => w.Description.Trim() == material.Description.Trim() && w.Quantity> 0);
var requestedMaterials = materialsWithGrade ?? materialsWithoutGrade;
Когда вы говорите, что это не работает, вы получаете сообщение об ошибке? – twrowsell
@twrowsell: nope, requestMaterials имеет значение null, и он должен иметь значение правого операнда, я отредактирую свой вопрос, чтобы сделать его более понятным. – BrenoSarkis
, так что вы запустили request.Lines.FirstOrDefault (w => w.Description.Trim() == material.Description.Trim() && w.Quantity> 0) и возвращает ненулевую ссылку? – twrowsell