Короче говоря. У меня есть 2 списка, которые содержат один и тот же тип (но используются для разных целей), и я хочу знать, содержит ли ЛИБО список с определенным именем.
Мой оригинальный код, который работал идеально, был:
if (listA.Any(var => var.Name == strMatch) || listB.Any(var => var.Name == strMatch))
{
//Do something
}
Этот код отлично работал независимо от того, присутствовал ли элемент в одном или обоих списках.
Позже у меня было несколько «невозможных» сбоев - вещей, которые никогда не могли случиться.
Я проследил это к тому, что если утверждение НИКОГДА не возвращает true.
Это озадачило меня целую вечность ... Я не мог понять, что происходит не так. В конце концов я сдался и заклеил скобки вокруг тела выражений lamda примерно так ...
if (listA.Any(var => (var.Name == strMatch)) || listB.Any(var => (var.Name == strMatch)))
{
//Do something
}
После перезапуска моей программы все «невозможные» ошибки исчезли и работали нормально. Удаление лишних защитных слоев приводит к появлению ошибок.
Раньше у меня никогда не было этой проблемы с лямбда-выражениями (особенно там, где они работают и ТО, после того, как несколько прогонов работают некорректно), а остальные лямбда-выражения работают правильно.
Пример: следующий код работает на 100%, как и ожидалось (при условии совпадения в одном из списков)
Item item =
ListA.FirstOrDefault(var => var.Name == strMatch) ??
ListB.FirstOrDefault(var => var.Name == strMatch);
Что происходит? Почему компилятор требователен к некоторым выражениям lamda, а не к другим? (Даже когда они идентичны?) ???
ОБНОВЛЕНИЕ :: Сведения о системе
Это встречалось с Microsoft Visual Studio 2008 (Professional), Windows Vista 32bit.
UPDATE
Ссылка на видео , это было проверено на других компьютерах и НЕ воспроизводимо. Заставляет меня чувствовать, что мой компьютер обречен. Переустановка VS не имеет никакого эффекта.
Пожалуйста, игнорируйте любые фоновые кошачьи шумы, она много мяукает, только когда слышит, как я что-то записываю.