Использование ключевого слова Equals в LINQ [Duplicate
-
27-10-2019 - |
Вопрос
Возможный дубликат:
Lambda выражение: == против. Equals ()
Привет,
Я использую много ключевого слова, чтобы сравнить переменные и другие вещи.
но
wines = wines.Where(d => d.Region.Equals(paramRegion)).ToList();
вернуть ошибку во время выполнения, когда в регионе данных null
Мне пришлось использовать код
wines = wines.Where(d => d.Region == paramRegion).ToList();
Чтобы избавиться от ошибки.
Есть идеи, почему это вызывает ошибку?
Спасибо.
Решение
Вы не можете вызвать методы экземпляра с помощью ссылки на объект NULL. Вы должны проверить, что регион не является нулевой, прежде чем вызовать методы экземпляра.
wines = wines.Where(d => d.Region != null && d.Region.Equals(paramRegion)).ToList();
А d.Region == paramRegion
(скорее всего) расширяется до object.Equals(d.Region, paramRegion)
и этот статический метод проверяет, являются ли параметры нулевыми или нет, прежде чем вызовать метод equals ().
Вы также можете написать условие в другом порядке, если знаете, что paramRegion
не может быть нулевым.
Debug.Assert(paramRegion != null);
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList();
Другие советы
В основном если
d.Region == null
тогда любой метод вызова, вот он Равно (...) На это поднимет исключение, поскольку оно не инициализировано.
Использование может использовать:
paramRegion.Equals(d.Region)