multidimensional example declaracion array c# arrays semantics

c# - example - ¿Cuál es la diferencia entre la nueva[] y la nueva cadena[]?



multidimensional array c# (6)

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

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

crea una string[] array que es igual con la primera.

El segundo se llama Implicitly Typed Arrays

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

Posible duplicado:
¿Para qué sirve esta nueva [] taquigrafía?

¿Hay alguna diferencia entre

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

y

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



Ninguna diferencia.

El segundo es un azúcar sintáctico llamado "Arreglos de tipo implícito" , y ambas expresiones devuelven un conjunto de cadenas.

Cuando no especifica el tipo de la matriz, se deduce de los tipos de los elementos utilizados para inicializar la matriz.
Para permitir la inferencia, la expresión debe satisfacer la siguiente condición:

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

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

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

S = {T1, ..., Tn}

para permitir la inferencia (es decir, sin error de compilación) debe ser posible que todos los tipos { T1, ... , Tn } se conviertan 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 compila:

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

mientras que lo siguiente no lo hace:

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

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

Esta característica se ha introducido con C # 3.0 junto con tipos anónimos y facilita la creación de instancias de los arreglos de estos últimos.

Por ejemplo, esto sería realmente difícil de obtener sin matrices implícitamente escritas:

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


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

Es como usar var , el compilador maneja lo que quisiste decir.


No hay diferencia. En el segundo caso, el compilador de C # es lo suficientemente inteligente como para inferir el tipo de la matriz, ya que ve que los valores que se utilizan para inicializar la matriz, son de tipo cadena.


new [] crea una matriz de tipo implícito en la que el tipo se deduce de los elementos. mientras que el otro enfoque crea una matriz de cadena.