Compartir a través de


Procedimiento para usar matrices y variables locales con tipo implícito en expresiones de consulta (Guía de programación de C#)

Puede usar variables locales con tipo implícito siempre que quiera que el compilador determine el tipo de una variable local. Debe usar variables locales con tipo implícito para almacenar tipos anónimos, que a menudo se usan en las expresiones de consulta. En los ejemplos siguientes, se muestran los usos obligatorios y opcionales de las variables locales con tipo implícito en las consultas.

Las variables locales con tipo implícito se declaran mediante la palabra clave contextual var. Para obtener más información, vea Variables locales con asignación implícita de tipos y Matrices con asignación implícita de tipos.

Ejemplos

En el ejemplo siguiente, se muestra un escenario común en el que la palabra clave var es necesaria: 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 en la instrucción foreach deben escribirse de forma implícita mediante el uso de var porque no se tiene acceso a un nombre de tipo para el tipo anónimo. Para obtener más información sobre los tipos anónimos, vea Tipos anónimos.

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 podría declararse como System.Collections.Generic.IEnumerable<string> en lugar de var. La palabra clave var se usa por comodidad. En el ejemplo, la variable de iteración en la instrucción foreach se escribe de forma explícita como una cadena, pero se podría declarar mediante 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 deduzca 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);
}

Consulte también