Когда использовать дополнительный метод с лямбдой по LINQtoObjects для фильтрации набора?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

15
задан Sam 17 June 2014 в 17:21
поделиться

4 ответа

LINQ превращается в вызовы метода как код, который Вы имеете.

, Другими словами, не должно быть никакого различия.

Однако в Ваших двух частях кода Вы не называете.ToList в первом, таким образом, первая часть кода произведет счетный источник данных, но если Вы называете.ToList на нем, эти два должны быть тем же.

6
ответ дан 1 December 2019 в 04:58
поделиться

Как упомянуто d будет IEnumerable<MyProduct>, в то время как f List<MyProduct>

, преобразование сделано компилятором C#

var d = 
    from mp in MyProducts
    where mp.Price < 50d
    select mp;

, преобразовывается в (прежде чем компиляция к IL и с расширенными дженериками):

var d = 
    MyProducts.
    Where<MyProduct>( mp => mp.Price < 50d ).
    Select<MyProduct>( mp => mp ); 
    //note that this last select is optimised out if it makes no change

Примечание, что в этом простом случае это имеет мало значения. То, где Linq становится действительно ценным, находится в намного более сложных циклах.

, Например, этот оператор мог включать группу-bys, заказы и несколько операторов, которым позволяют, и все еще быть читаемым в формате Linq, когда эквивалент .Method().Method.Method() быть сложным.

4
ответ дан 1 December 2019 в 04:58
поделиться

Кроме различия ToList, № 2 является намного большим количеством читаемого и естественного IMO

0
ответ дан 1 December 2019 в 04:58
поделиться

Синтаксис, который Вы используете для d, будет преобразован компилятором в тот же IL как дополнительные методы. "Подобный SQL" синтаксис, как предполагается, является более естественным способом представить выражение LINQ (хотя я лично предпочитаю дополнительные методы). Как был уже указан, первый пример возвратит результат IEnumerable, в то время как второй пример возвратит результат Списка из-за вызова в ToList (). Если Вы удалите ToList () вызов во втором примере, то они оба возвратят тот же результат как, Где возвраты IEnumerable заканчиваются.

0
ответ дан 1 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: