2009-07-27 6 views
6

La única ventaja que puedo ver que hacer:¿Cuáles son los beneficios de tipos implícitos en C# 3.0> +

var s = new ClassA(); 

sobre

ClassA s = new ClassA(); 

Es eso más adelante, si usted decide que quiere ClassB, se solo tiene que cambiar el RHS de la declaración.

supongo que si está enumerando a través de una colección también se puede simplemente a 'var' y luego averiguar el tipo más adelante.

es que ?? ¿Hay algún otro gran beneficio que mi débil mente no vea?

+0

Y cuando digo "supongo que si está enumerando a través de una colección también se puede simplemente a 'var' y luego averiguar el tipo más adelante." Sé que ya está tipeado en tiempo de ejecución ... Solo quise decir en tu lógica. – Matt

+0

posible duplicado de [Uso de la palabra clave var en C#] (http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal

Respuesta

8

Es sobre todo el azúcar sintáctica. Es realmente tu preferencia. A menos que cuando se utilicen tipos anónimos, se requiera usar var. Aunque prefiero la tipificación implícita siempre que sea posible, realmente brilla con LINQ.

Me resulta redundante para escribir un tipo de dos veces.

List<string> Foo = new List<string>(); 

Cuando puedo simplemente escribir var cuando es obvio de qué tipo es.

var Foo = new List<string>(); 
+3

No es puramente azúcar. Se requiere cuando se trabaja con tipos anónimos. – jrista

+1

Corregir, pero incluso los tipos anónimos son azúcar también. – M4dRefluX

+1

Eso es como decir que los iteradores son azúcar. Claro que puedes construir el tuyo propio, pero el compilador realmente está haciendo un buen trabajo para ti, incluyendo anulaciones no triviales en Equals, GetHashcode y ToString. – dahlbyk

4

empecé lo que resultó ser un hilo generando mucha controversia cuando me inscribí aquí (mi elección de "maldad" para describir el uso general de la var era obviamente una elección terrible.) No hace falta decir que tengo más aprecio por var que lo hice antes de empezar ese hilo, así como una mejor comprensión de cómo se puede utilizar de manera útil:

The evilness of 'var' in C#?

Algunas buenas razones para utilizar var:

  • La brevedad
  • Reducción de Repetición (SECO)
  • reducido esfuerzo refactorización
  • Soporta los tipos anónimos (razón clave que se añadió a C#)
0

La razón primordial para el tipado implícito fue el apoyo a los tipos anónimos, como los producidos por las consultas LINQ. También pueden ser una gran ventaja cuando se trata de genéricos de tipo complejo ... algo así como Dictionary<int,List<string>>. Eso no es demasiado complejo, pero imagine enumerar ...

foreach KeyValuePair<int,List<string>> pair in myDictionary 
{ 

} 

se simplifica con el tipeo implícito.

2

Me permite no repito innecesaria. Considere esto:

Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>(); 

Tenemos un tipo de nombre muy largo repetido dos veces en la misma línea dos veces sin ningún beneficio en absoluto.Además, si alguna vez necesita refactorizar esto, necesitará actualizar el tipo dos veces. Considerando que el presente es tan expresiva:

var dict = new Dictionary<string, List<int>>(); 

Todavía no hay ninguna duda sobre el tipo de dict aquí, pero el código es más corto, y me aseguran que es más fácil de leer también.

5

var es útil para los tipos anónimos, que no tienen nombres para su uso.

var point = new {X = 10, Y = 10}; 

Esto creará un tipo anónimo con propiedades X e Y. Sin embargo, se usa principalmente para admitir LINQ. Supongamos que usted tiene:

class Person 
{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
    public String Address {get; set;} 
    // Many other fields 
} 

List<Person> people; // Some list of people 

Ahora supongamos que quiero seleccionar sólo los nombres y años hasta los 18 años de esas personas que están bajo la edad de 18 años:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age}; 

Ahora minors contiene una List de algunas tipo anónimo Podemos repetir aquellas personas con:

foreach (var minor in minors) 
{ 
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft); 
} 

Nada de esto hubiera sido posible sin; Tendríamos que seleccionar el objeto Person completo y luego calcular YearsLeft en nuestro ciclo, que no es lo que queremos.

0

Mientras que la palabra clave var se introdujo principalmente para apoyar los tipos anónimos, el principal argumento que he visto para usarla más ampliamente es por razones de brevedad/código sea más legible, además de montar más en su línea de código:

Dictionary<string, double> data = new Dictionary<string, double>(); 
versus 
var data = new Dictionary<string, double>(); 

Aunque no es una buena razón para la mayoría de la gente, también me gusta la palabra clave var como programador ciego, mientras escucho el código que está siendo leído y por lo tanto aquí el nombre de la variable después de sólo una syllabul :-)

1

realidad " var "in C# se usa para tratar con tipos anónimos.

igual:

var t = new {number = 10, name = "test"}; 
Cuestiones relacionadas