2011-02-16 24 views
14

Duplicar posibles:
What's the point of the var keyword?¿Cuál es el propósito de 'var'?

estoy no preguntando cómo funciona. Soy no preguntándole si esto afecta el rendimiento. Ya sé esas respuestas.

Quiero saber qué inspiró al equipo de MS C# para que lo agregue al idioma en primer lugar. No agrega cosas frívolas a un idioma. Debe haber habido un problema notable que resolvió. ¿Cuál fue/es ese problema?

El ejemplo más cercano que he visto que "el problema que resuelve" está al utilizar los tipos anónimos, así:

var linqResult = from element in SomeCollection s 
       elect new { element.A, element.B }  

La ironía de este uso es que el estilo y la codificación en estándares (tales como guías proporcionado por Microsoft) aconsejan al codificador que evite el uso de 'var' cuando el tipo resultante no sea obvio. En otras palabras, el objetivo (presumiblemente) previsto de 'var' está en conflicto con las pautas estándar de codificación.

Si estuviera escribiendo normas de codificación, y estaba tratando de evitar el uso excesivo de 'var', estaría algo inclinado a decir "use 'var' solo en respuesta a tipos anónimos". Pero eso trae la pregunta de círculo completo: ¿Cuál fue/es el propósito de haber agregado 'var' al lenguaje?

+0

que realmente responde a su pregunta.'var' se introdujo para admitir tipos anónimos, porque no hay otra manera de tener variables de tipo anónimo. – Andrey

+0

Ya tiene la respuesta: el propósito original era manejar tipos anónimos. –

+0

@David - Bingo, estaba buscando eso. – ChaosPandion

Respuesta

14

tipos anónimos fue el más grande, sino también reducir la repetición dentro de los métodos:

Dictionary<MyCustomType, List<MyOtherCustomType>> dict = new Dictionary<MyCustomType, List<MyOtherCustomType>>(); 
+1

Sí. Este es el caso cuando ** es obvio ** qué tipo es la variable. Por lo tanto, se puede utilizar en este escenario (aunque yo no). –

+0

@Robert Esa es una decisión estilística y una opción. Para Repetitions siempre lo uso (escriba x = new type()), pero Method Calls es una decisión caso por caso. –

7

¡Exactamente! Tipos anónimos ¿Cómo podría mantener una referencia a un tipo anónimo creado si no hubiera var y todavía tener intellisense junto con él?

En otras palabras: cuando no había var, no habría ningún tipo anónimo en el sentido utilizable que tenemos ahora con soporte de tiempo de compilación. Habría demasiados errores de tiempo de ejecución con tipos anónimos.

La adición de azúcar (de la complejidad cuando se usa en exceso) es que se puede usar var con incluso variables no anónimas. Claro que funciona, pero es un mal hábito.

+1

Utilizarías un objeto, pero la desventaja es que no tendrías intellisense. –

+0

@Yuriy: No solo no tendrá Intellisense, sino también Propiedades: el tipo anónimo en el ejemplo OP tiene dos propiedades: .A y .B. No puede acceder a System.Object.A ya que Object no tiene esta propiedad, por lo que necesita lanzarlo. Sin embargo, ¿lanzarlo a qué? En .net 4, la dinámica podría resolver eso, pero .net 3 no tenía eso. –

+1

@Michael: seguro que podría, a través de la reflexión. Realmente no me gustaría. –

1

Por lo que yo sé la palabra clave var se hizo más o menos para hacer LINQ easierby permitiendo el uso de tipos anónimos

+2

var no hace nada para habilitar LINQ. –

0

De MSDN:

En muchos casos el uso de var es opcional y es solo una conveniencia sintáctica de . Sin embargo, cuando se inicializa una variable con un tipo anónimo , debe declarar la variable como var si necesita acceder a las propiedades del objeto en un momento posterior. Este es un escenario común en las expresiones LINQ .

Cuestiones relacionadas