допустим есть класс
class MyType
{
public int ID { get; set; }
}
Нужно произвести поиск элементов в коллекции этих типов, где один из элементов может быть нулем. Из кода я думаю ясно, что я хочу. Выражение Linq в методе Find вызывает NullReference Exception.
private void simpleButton4_Click(object sender, EventArgs e) {
IEnumerable<MyType> coll = new MyType[] {
null, // Внимание null
new MyType() { ID = 1},
new MyType() { ID = 2}
};
MyType pat1 = null;
MyType found1 = Find(pat1, coll); // должен вернуть null
MyType pat2 = new MyType() { ID = 3 };
MyType found2 = Find(pat2, coll); // должнен вернуть null (NullReference Exception)
MyType pat3 = new MyType() { ID = 1 };
MyType found3 = Find(pat3, coll); // должен вернить второй элемент коллекции (NullReference Exception)
}
private MyType Find(MyType pattern, IEnumerable<MyType> coll) {
return coll.Where(x=> (pattern == null && x == null) || (pattern != null && pattern.ID == x.ID)).FirstOrDefault();
}
PS. На самом деле я создал метод (код не привожу), который правильно решает задачу, просто он получился достаточно сложным для такой простой задачи. Подозреваю можно как-то по-другому с Linq вывернуться