Pregunta

La única ventaja que puedo ver que hacer:

var s = new ClassA();

sobre

ClassA s = new ClassA();

Es eso más adelante, si usted decide que quiere ClassB, es suficiente con cambiar el lado derecho 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 eso ?? ¿Hay algún otro beneficio enorme mi mente débil no ve?

¿Fue útil?

Solución

Es sobre todo el azúcar sintáctica. Es realmente su preferencia. A menos que al utilizar los tipos anónimos, a continuación, utilizando var se requiere. Yo prefiero tipos implícitos siempre que sea posible, sin embargo, lo que realmente brilla con LINQ.

Me resulta redundante para escribir un tipo de dos veces.

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

Cuando puedo fácilmente sólo escribo var cuando es obvio que el tipo es.

var Foo = new List<string>();

Otros consejos

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. Se utiliza principalmente para apoyar LINQ sin embargo. Suponga que 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 aquellas personas que están bajo la edad de 18:

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 algún 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 sería posible de otro modo; tendríamos que seleccionar todo el objeto Person y luego calcular YearsLeft en nuestro bucle, lo cual no es lo que queremos.

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 de lo que hice antes de empezar ese hilo, así como una mejor comprensión de cómo se puede utilizar de manera útil:

La maldad de 'var' en C #?

Algunas buenas razones para usar var:

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

Tener un vistazo a esta pregunta. A lo mejor te ayudarán a decidir.

El uso de la palabra clave var en C #
https://stackoverflow.com/questions/633474/c-do-you-use-var

Me permite no repito innecesaria. Considere lo siguiente:

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

Tenemos una muy larga nombretipo repite dos veces en la misma línea dos veces con absolutamente ningún beneficio. Por otra parte, si alguna vez necesitas refactorizar esto, tendrá que 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.

En realidad "var" en C # se utiliza para hacer frente a tipo anónimo.

Al igual que:

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

La razón primordial para la tipificación implícita era apoyar los tipos anónimos, como los producidos por las consultas LINQ. También pueden ser una gran ventaja cuando se trata de los genéricos-complejos mecanografiado ... algo así como Dictionary<int,List<string>>. Eso no es demasiado complejo, pero imagina enumerar ...

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

}

se simplifica con tipos implícitos.

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: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top