¿Qué significa realmente var
en el siguiente caso?Uso de var en linq
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
¿Qué significa realmente var
en el siguiente caso?Uso de var en linq
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
var
es un marcador de posición para un compilador-creado ("anonymous") type que tiene tres propiedades, ProductName
, Category
y Price
.
NO es una variante (por ejemplo, como en Visual Basic). Es un tipo concreto y se puede usar como tal en otros lugares del código.
variables con var son variables locales tipadas implícitamente que se escriben fuertemente como si hubiera declarado el tipo usted mismo, pero el compilador determina el tipo. obtiene el tipo de resultado.
y aquí un buen leer C# Debate: When Should You Use var?
y aquí otra C# 3.0 Tutorial
Se le facilita el dolor de tener que declarar el tipo exacto de su resultado de la consulta manualmente. Pero tengo que empatizar, esto no es tipado dinámico: la variable productInfos
tendrá un tipo estático, pero es creado por el compilador en lugar de usted.
En este caso particular, el tipo de productoInfos es un compilador generado Anonymous Type con 3 propiedades, NombreProducto, Categoría y Precio.
Las dos líneas:
var productInfos = from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
y
IEnumerable<CompilerGeneratedType> productInfos = from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
son equivalentes. CompilerGeneratedType
es un tipo que será creado por el compilador y tiene las tres propiedades públicas ProductName, Price, and Category
. var
es útil por dos razones:
CompilerGeneratedType
serán generados por el compilador por lo que es imposible que declara una variable que tiene ese tipo.Esa es una buena respuesta, pero no es 100% correcta. Es bastante posible referirse al CompilerGeneratedType. No directamente por su nombre, pero ciertamente indirectamente. Por ejemplo: var test = new {P1 = "Hello", P2 = "Bye"}; Escriba t = test.GetType(); produce un tipo concreto con un nombre concreto, en mi caso de ejemplo concreto UnderlyingSystemType: {<> f__AnonymousType0'2 [System.String, System.String]}. –
var = programador de usar = = teclear menos hace perezoso (otra manera de ver las cosas) = trae la oscuridad para codificar si el nuevo FW a 3,5
var es la variable que no tiene ningún tipo de datos. puedes almacenar cualquier cosa en var variable. – Xulfee