Compartir a través de


Cómo: Usar matrices y variables locales con tipo implícito en expresiones de consulta (Guía de programación de C#)

Puede usar variables locales tipificadas implícitamente siempre que desee que el compilador determine el tipo de una variable local. Debe usar las variables locales tipificadas implícitamente para almacenar tipos anónimos, que suelen usarse en expresiones de consulta. En los ejemplos siguientes se muestran los usos opcionales y obligatorios de las variables locales tipificadas implícitamente en las consultas.

Las variables locales tipificadas implícitamente se declaran usando la palabra clave contextual var. Para obtener más información, vea Variables locales con asignación implícita de tipos (Guía de programación de C#) y Matrices con asignación implícita de tipos (Guía de programación de C#).

Ejemplo

En el ejemplo siguiente se muestra un escenario común en el que se requiere la palabra clave var: una expresión de consulta que genera una secuencia de tipos anónimos. En este escenario, la variable de consulta y la variable de iteración de la instrucción foreach deben escribirse implícitamente mediante var porque no se tiene acceso a un nombre de tipo del tipo anónimo. Para obtener más información sobre los tipos anónimos, vea Tipos anónimos (Guía de programación de C#).

private static void QueryNames(char firstLetter)
{
    // Create the query. Use of var is required because 
    // the query produces a sequence of anonymous types: 
    // System.Collections.Generic.IEnumerable<????>. 
    var studentQuery =
        from student in students
        where student.FirstName[0] == firstLetter
        select new { student.FirstName, student.LastName };

    // Execute the query and display the results. 
    foreach (var anonType in studentQuery)
    {
        Console.WriteLine("First = {0}, Last = {1}", anonType.FirstName, anonType.LastName);
    }
}

En el ejemplo siguiente se usa la palabra clave var en una situación similar, pero en la que el uso de var es opcional. Dado que student.LastName es una cadena, la ejecución de la consulta devuelve una secuencia de cadenas. Por tanto, el tipo de queryID puede declararse como System.Collections.Generic.IEnumerable<string> en lugar de var. La palabra clave var se usa para mayor comodidad. En el ejemplo, la variable de iteración de la instrucción foreach se escribe explícitamente como cadena, pero podría declararse usando var. Dado que el tipo de la variable de iteración no es un tipo anónimo, el uso de var es opcional, no es obligatorio. Recuerde que var no es un tipo, sino una instrucción para que el compilador infiera y asigne el tipo.

// Variable queryID could be declared by using  
// System.Collections.Generic.IEnumerable<string> 
// instead of var. 
var queryID =
    from student in students
    where student.ID > 111
    select student.LastName;

// Variable str could be declared by using var instead of string.      
foreach (string str in queryID)
{
    Console.WriteLine("Last name: {0}", str);
}

Vea también

Referencia

Métodos de extensión (Guía de programación de C#)

var (Referencia de C#)

Conceptos

Guía de programación de C#

Expresiones de consultas LINQ (Guía de programación de C#)

Otros recursos

LINQ (Language-Integrated Query)