Использование 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 полезно по двум причинам:

  1. CompilerGeneratedType будет сгенерирован компилятором, поэтому невозможно объявить переменную с таким типом.
  2. вам не нужно слишком много думать о типе коллекции результата. Linq может делать свое дело и тебе не нужно об этом беспокоиться.

в этом конкретном случае тип productInfos является компилятором, генерируемым Анонимного Типа С 3 свойствами, ProductName, категория и цена.


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

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

и вот еще В C# 3.0 Учебник


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


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