C # dichiara array di stringhe vuoto


152

Devo dichiarare un array di stringhe vuoto e sto usando questo codice

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

Ma ricevo l'errore "nome metodo previsto".

Cosa c'è che non va?


2
Perché hai bisogno di un array vuoto? Cosa stai cercando di fare?
Sig. T.

7
@MrT. non pertinente alla domanda.
James,

1
@James - forse c'è un modo più elegante di fare qualunque cosa stia cercando di fare.
Sig. T.

4
@aquanat - anche se una risposta è già stata accettata e non conosco il tuo codice o la logica dietro di esso, ti consiglierei umilmente di non restituire un array vuoto ma null e controllare dalla funzione chiamante se il valore restituito è null o non. Penso che sarebbe molto più elegante, leggibile ed efficiente.
Sig. T.

2
Il motivo per cui non si desidera restituire null è che l'utente del metodo deve verificare null. Ad esempio, il consumatore del metodo potrebbe inserire il valore restituito in un foreach e se viene restituito un array vuoto, non vi sono problemi. Tuttavia, se viene restituito null, è necessario che sia presente un controllo per null prima di ripetere il valore restituito
JAB

Risposte:


265

Prova questo

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

1
Grazie a tutti ... non chiedetemi perché, ma l'unico modo era: string [] arr = new String [0] as string [];
aquanat,

2
Il metodo di Atish ha funzionato ed eliminato il lamento di Visual Studio per l'utilizzo di una variabile che non è inizializzata se la assegnerò in un'istruzione if
Joe,

1
Un'altra opzione èc# Array.Empty<string>()
Jannick Breunis,

68

La tua sintassi è sbagliata:

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

o

string[] arr = new string[0];

1
Perché la stringa è sia in maiuscolo che in maiuscolo negli esempi?
It'sNotALie.

1
@newStackExchangeInstance, appena copiato il codice "così com'è" dalla domanda. Entrambe le righe vengono compilate correttamente, anche se concordo sul fatto che seguire uno stile sia meglio.
Andrei,

15

Se stai usando .net 4.6, hanno una nuova sintassi che puoi usare:

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

var myArray = Array.Empty<string>();

Bel trucco! E funziona anche con IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu,


8

I costruttori di array sono diversi. Ecco alcuni modi per creare un array di stringhe vuoto:

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

(scusa, sul cellulare)


1

Quelle cose ricci a volte sono difficili da ricordare, ecco perché c'è un'ottima documentazione :

// Declare a single-dimensional array  
int[] array1 = new int[5];

Non è necessario modificare questa risposta, poiché le risposte servono allo scopo gererale e non alla domanda specifica per dire. Risponde "Qual è la sintassi per dichiarare e inizializzare un array" ed è una citazione dal link che ho pubblicato. OP può sostituire intcon stringse gli piace.
CodeCaster

1

La tua sintassi non è valida.

string[] arr = new string[5];

Ciò creerà arrun array di stringhe referenziato, in cui si trovano tutti gli elementi di questo array null. (Poiché le stringhe sono tipi di riferimento )

Questa matrice contiene gli elementi da arr[0]a arr[4]. L' newoperatore viene utilizzato per creare l'array e inizializzare gli elementi dell'array ai loro valori predefiniti. In questo esempio, tutti gli elementi dell'array sono inizializzati su null.

Single-Dimensional Arrays (C# Programming Guide)


Grazie a tutti ... non chiedetemi perché, ma l'unico modo era: string [] arr = new String [0] as string [];
aquanat,

0

Se è necessario creare un array vuoto, è possibile farlo:

string[] arr = new string[0];

Se non si conosce la dimensione, è possibile utilizzare List<string>anche come

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();

Sono così dispiaciuto. Ho rovinato accidentalmente il tuo post con modifiche sbagliate.
Soner Gönül,

-3

Quanto segue dovrebbe funzionare bene.

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

5
Non è un array vuoto, poiché contiene un elemento che è una stringa vuota. arr.Length () restituirà 1.
Guillermo Prandi

Questo potrebbe non essere un array vuoto ma trovo questa risposta nulla di sicura. Grazie! 1 su!
hubert17,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.