Использование var в linq
Что значит var
действительно ли в следующем случае?
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
6 ответов
var
является заполнителем для созданного компилятором ("аноним") типа, который имеет три свойства:ProductName
, Category
и Price
.
это не вариант (например, как в Visual Basic). Это конкретный тип и может использоваться как таковой в других местах кода.
две строки:
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, and Category
. var
полезно по двум причинам:
-
CompilerGeneratedType
будет сгенерирован компилятором, поэтому невозможно объявить переменную с таким типом. - вам не нужно слишком много думать о типе коллекции результата. Linq может делать свое дело и тебе не нужно об этом беспокоиться.
в этом конкретном случае тип productInfos является компилятором, генерируемым Анонимного Типа С 3 свойствами, ProductName, категория и цена.
переменные с VAR неявно типизированные локальные переменные, которые типизированы как если бы тип, но компилятор определяет тип. он получает тип результата.
и здесь приятно читать C# дебаты: когда вы должны использовать var?
и вот еще В C# 3.0 Учебник
var = программист дружественный = меньше ввода = делает вас ленивым(другой способ взглянуть на него) = приносит неясность в код, если новый для 3.5 FW
это облегчает вам боль от необходимости объявлять точный тип вашего результата запроса вручную. Но я должен сопереживать, это не динамическая типизация:productInfos
переменная будет иметь статический тип, но он создается компилятором вместо вас.