C # declara una matriz de cadenas vacía

152

Necesito declarar una matriz de cadenas vacía y estoy usando este código

string[] arr = new String[0]();

Pero me sale el error "nombre esperado del método".

Que pasa

aquanat
fuente
2
¿Por qué necesitas una matriz vacía? ¿Que estás tratando de hacer?
Sr. T.
77
@MrT. No es realmente relevante para la pregunta.
James
1
@James: tal vez haya una forma más elegante de hacer lo que sea que esté tratando de hacer.
Sr. T.
44
@aquanat: aunque ya se ha aceptado una respuesta y no conozco su código o la lógica detrás de esto, humildemente le sugeriría que no devuelva una matriz vacía sino nula y que compruebe desde la función de llamada si el valor devuelto es nulo o no. Creo que sería mucho más elegante, legible y eficiente.
Sr. T.
2
La razón por la que no desea devolver nulo es que el consumidor del método tiene que verificar si es nulo. Por ejemplo, el consumidor del método podría poner el valor devuelto en un foreach y si se devuelve una matriz vacía, no hay problema. Sin embargo, si se devuelve nulo, debe haber una comprobación de nulo antes de repetir el valor devuelto
JAB

Respuestas:

265

Prueba esto

string[] arr = new string[] {};
Atish Dipongkor - MVP
fuente
1
Gracias a todos ... no me pregunten por qué, pero la única forma era: string [] arr = new String [0] como string [];
aquanat
2
El método de Atish funcionó y eliminó las quejas de Visual Studio sobre el uso de una variable que no se inicializa si lo asigno en una declaración if
Joe
1
Otra opción esc# Array.Empty<string>()
Jannick Breunis
68

Su sintaxis es incorrecta:

string[] arr = new string[]{};

o

string[] arr = new string[0];
Andrei
fuente
1
¿Por qué las cadenas están en mayúsculas y no en mayúsculas en sus ejemplos?
Notalie.
1
@newStackExchangeInstance, acaba de copiar el código "tal cual" de la pregunta. Ambas líneas se compilan bien, aunque estoy de acuerdo en que seguir un estilo es mejor.
Andrei
15

Si está utilizando .net 4.6, tienen una nueva sintaxis que puede usar:

using System;  // To pick up definition of the Array class.

var myArray = Array.Empty<string>();
Brian
fuente
¡Buen truco! Y también funciona con IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Puedes probar esto

string[] arr = {};
Bharadwaj
fuente
8

Los constructores de matrices son diferentes. Aquí hay algunas formas de hacer una matriz de cadenas vacía:

var arr = new string[0];
var arr = new string[]{};
var arr = Enumerable.Empty<string>().ToArray()

(lo siento, en el móvil)

Es notalie.
fuente
1

Esas cosas rizadas a veces son difíciles de recordar, por eso hay una excelente documentación :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
fuente
No es necesario editar esta respuesta, ya que las respuestas sirven al propósito general, y no a la pregunta específica por decir. Responde "¿Cuál es la sintaxis para declarar e inicializar una matriz" y es una cita del enlace que publiqué. OP puede reemplazar intcon stringsi le gusta.
CodeCaster
1

Su sintaxis no es válida.

string[] arr = new string[5];

Eso creará arruna matriz de cadenas referenciada, donde se encuentran todos los elementos de esta matriz null. (Dado que las cadenas son tipos de referencia )

Esta matriz contiene los elementos de arr[0]a arr[4]. El newoperador se utiliza para crear la matriz e inicializar los elementos de la matriz a sus valores predeterminados. En este ejemplo, todos los elementos de la matriz se inicializan en null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
fuente
Gracias a todos ... no me pregunten por qué, pero la única forma era: string [] arr = new String [0] como string [];
aquanat
0

Si debe crear una matriz vacía, puede hacer esto:

string[] arr = new string[0];

Si no conoce el tamaño, también puede usarlo List<string>como

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Rahul
fuente
Lo siento mucho. Accidentalmente arruiné tu publicación con ediciones incorrectas.
Soner Gönül
-3

Lo siguiente debería funcionar bien.

string[] arr = new string[] {""};
Karthikeyan Gunasheker
fuente
55
Esa no es una matriz vacía, ya que contiene un elemento que es una cadena vacía. arr.Length () regresará 1.
Guillermo Prandi
Puede que no sea una matriz vacía, pero esta respuesta me parece nula y segura. ¡Gracias! ¡1 de ventaja!
hubert17