18 votos

¿Cuál es la diferencia entre[] y new string[]?

Posibles Duplicados:
¿Qué es esta nueva[] una abreviatura?

Hay alguna diferencia entre

var strings = new string[] { "hello", "world" };

y

var strings2 = new[] { "hello", "world" };

29voto

X.L.Ant Puntos 8563

En este caso, no hay diferencia, como new[] le inferir los valores proporcionados tipo como string.

Ver Implícitamente matrices.

7voto

digEmAll Puntos 24336

Ninguna diferencia.

El segundo es un sintáctico de azúcar llamado "Implícitamente matrices", y tanto las expresiones devuelven un array de cadenas.

Cuando no se especifica el tipo de la matriz, es inferido a partir de los tipos de los elementos que se utilizan para inicializar la matriz.
Para permitir la inferencia, la expresión debe satisfacer la siguiente condición:

Considerando implícitamente de la matriz de expresión como esta:

   var arr = new []{ obj1, ... , objn }

y el conjunto de todos los tipos de los elementos en la inicialización:

   S = {T1, ..., Tn}

para permitir la inferencia (es decir, no hay error del compilador) debe ser posible para todos los tipos { T1, ... , Tn } a ser implícitamente a uno de los tipos en el conjunto S.

Así, por ejemplo, dadas las siguientes clases:

class Base { }
class Derived1 : Base { }
class Derived2 : Base { }
class Derived3
{ 
    public static implicit operator Base(Derived3 m)
    { return null; }
}

Este código se compila:

var arr = new []{ new Derived1(), new Derived2(), new Derived3(), new Base()};

mientras que en el siguiente no:

var arr = new []{ new Derived1(), new Derived2(), new Derived3() };

dado que en el primer caso todos los 3 tipos se puede convertir implícitamente tipo Basey Base tipo está dentro del conjunto S = { Derived1, Derived2, Derived3, Base }, mientras que en el segundo caso todos los tipos no se puede convertir a un tipo en el conjunto S = { Derived1, Derived2, Derived3 }


Esta característica ha sido introducido con C# 3.0 junto con los tipos anónimos y hace que la creación de instancias de matrices de este último sea más fácil.

Por ejemplo, esto sería muy difícil de conseguir sin implícitamente matrices:

var arrayOfAnonymous = new[] { new { A = 3, B = 4 }, new { A = 2, B = 5 } };

6voto

Soner Gönül Puntos 35739

En este caso, no hay ninguna diferencia. Porque de hello y world son string;

var strings2 = new[] { "hello", "world" };

crea un string[] de la matriz que es la misma con la primera.

enter image description here

Segundo es llamado Implicitly Typed Arrays

Si vamos un paso más allá, tienen el mismo IL código.

2voto

Snæbjørn Puntos 1066

Ninguno, la compilación interpreta como new string[] { "hello", "world" };

Es como usar var, el compilador de asas de lo que significaba.

1voto

dutzu Puntos 3072

nuevo[] crea un implícitamente matriz en la que el tipo es infered de los elementos. mientras que el otro enfoque crea un array de string.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X