Использование var в linq

Что делает var действительно в следующем случае?

var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
8
задан Charlie Salts 2 May 2010 в 17:48
поделиться

6 ответов

var - это заполнитель для созданного компилятором ("анонимного") типа, который имеет три свойства, ProductName, Category и Price.

Это НЕ вариант (например, как в Visual Basic). Это конкретный тип и может быть использован как таковой в других местах кода.

7
ответ дан 5 December 2019 в 06:37
поделиться

Две строки:

var productInfos = from p in products 
select new { p.ProductName, p.Category, Price = p.UnitPrice };

и

IEnumerable<CompilerGeneratedType> productInfos = from p in products 
select new { p.ProductName, p.Category, Price = p.UnitPrice };

эквивалентны. CompilerGeneratedType - это тип, который будет создан компилятором и имеет три общедоступных свойства ProductName, Price и Category . var полезен по двум причинам:

  1. CompilerGeneratedType будет сгенерирован компилятором, поэтому вы не сможете использовать имя типа в объявлении.
  2. Вам не нужно слишком много думать о типе коллекции результата. Linq может делать свое дело, и вам не о чем беспокоиться.
9
ответ дан 5 December 2019 в 06:37
поделиться

переменные с var - это неявно типизированная локальная переменная, которая строго типизирована, как если бы вы сами объявили тип, но компилятор определяет тип. он получает тип результата.

и здесь неплохое прочтение Дебаты по C #: когда следует использовать var?

и еще одно Учебное пособие по C # 3.0

3
ответ дан 5 December 2019 в 06:37
поделиться

Оно избавляет вас от боль от необходимости объявлять точный тип результата запроса вручную. Но я должен посочувствовать, это не динамическая типизация: переменная productInfos будет иметь статический тип, но создается компилятором вместо вас.

0
ответ дан 5 December 2019 в 06:37
поделиться

В данном конкретном случае тип productInfos - это созданный компилятором анонимный тип с 3 свойствами: ProductName, Category и Price.

4
ответ дан 5 December 2019 в 06:37
поделиться

var = дружественный к программисту = меньше типизации = делает вас ленивым (другой взгляд на это) = вносит неясность в код, если новый для 3.5 FW

2
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

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