2013-11-12 8 views
0

У меня есть список объектов как ICollection<objectA> listA. Теперь я пытаюсь выполнить петлю через этот список А и пытаюсь сопоставить условие и назначить результат, найденный в переменной. Я попытался ниже:Лямбда петля через ICollection не удалось найти свойство объекта

varB.someDesc = listA.FirstOrDefault(x=>x.ID == varB.ID).someDesc 

Ошибка жалуясь, что x.ID является объект нулевой ссылки. Когда я помещаю точку прерывания, я вижу, что в списке A есть много элементов, и есть атрибут ID. Могу ли я узнать, что пошло не так?

+2

Какое сообщение об ошибке? Я подозреваю, что может быть жалоба на результат «FirstOrDefault» равным null, а не 'x.ID', как вы говорите в своем вопросе. Это означало бы, что в списке нет элемента с соответствующим идентификатором. –

ответ

3

Я предлагаю проверки возвращаемого значения FirstOrDefault() следующим образом:

var item = listA.FirstOrDefault(x=>x.ID == varB.ID); 
if (item != null) 
    varB.someDesc = item.someDesc; 

ошибка не может быть именно то, что вы думаете.

+0

Для того, чтобы уточнить, 'FirstOrDefault()' возвращает первую совпадающую запись или значение по умолчанию для выбранного типа, если совпадение не найдено. Для классов по умолчанию используется значение «null», для примитивных типов вы можете просмотреть его (например, 'int' равно 0,' bool' - false и т. Д.). –

-2

Попробуйте этот код.

varB.someDesc = listA.Where(x=>x.ID == varB.ID).FirstOrDefault().someDesc 

Вам лучше проверить объект Null перед назначением.

+3

Ваш код и код, указанный OP, функционально эквивалентны. – andleer