C # declara uma matriz de cadeias vazia

152

Preciso declarar uma matriz de seqüência de caracteres vazia e estou usando esse código

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

Mas eu recebo o erro "nome do método esperado".

O que há de errado?

aquanat
fonte
2
Por que você precisa de uma matriz vazia? O que você está tentando fazer?
T. T.
7
@MrT. não é realmente relevante para a questão.
James
1
@ James - talvez haja uma maneira mais elegante de fazer o que ele está tentando fazer.
T. T.
4
@aquanat - embora uma resposta já tenha sido aceita e eu não conheça seu código ou a lógica por trás disso, sugiro humildemente que você não retorne uma matriz vazia, mas nula e verifique na função de chamada se o valor retornado é nulo ou não. Eu acho que seria muito mais elegante, legível e eficiente.
T. T.
2
O motivo pelo qual você não deseja retornar nulo é que o consumidor do método precisa procurar nulo. Por exemplo, o consumidor do método pode colocar o valor retornado em um foreach e, se uma matriz vazia for retornada, não haverá problema. No entanto, se null for retornado, será necessário verificar se há nulo antes de iterar o valor retornado
JAB

Respostas:

265

Tente isto

string[] arr = new string[] {};
Atish Dipongkor - MVP
fonte
1
Obrigado a todos ... não me pergunte por que, mas o único caminho era: string [] arr = new String [0] as string [];
aquanat 30/05
2
O método de Atish trabalhou e eliminado do estúdio visuais reclamar sobre o uso de uma variável que não é inicializado se eu atribuí-lo em uma instrução if
Joe
1
Outra opção éc# Array.Empty<string>()
Jannick Breunis 19/02
68

Sua sintaxe está errada:

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

ou

string[] arr = new string[0];
Andrei
fonte
1
Por que a string é maiúscula e não maiúscula nos seus exemplos?
caso.
1
@newStackExchangeInstance, apenas copiou o código "como está" da pergunta. Ambas as linhas compilam bem, embora eu concorde que seguir um estilo seja melhor.
Andrei
15

Se você estiver usando o .net 4.6, eles têm uma nova sintaxe que você pode usar:

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

var myArray = Array.Empty<string>();
Brian
fonte
Bom truque! E também funciona com IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Você pode tentar isso

string[] arr = {};
Bharadwaj
fonte
8

Os construtores de matrizes são diferentes. Aqui estão algumas maneiras de criar uma matriz de string vazia:

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

(desculpe, no celular)

It'sNotALie.
fonte
1

Às vezes, essas coisas encaracoladas são difíceis de lembrar, é por isso que existe uma excelente documentação :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
fonte
Não há necessidade de editar esta resposta, pois as respostas servem ao propósito geral e não à pergunta específica por palavra. Ele responde "Qual é a sintaxe para declarar e inicializar uma matriz" e é uma citação do link que eu postei. OP pode substituir intcom stringse ele gosta.
CodeCaster
1

Sua sintaxe é inválida.

string[] arr = new string[5];

Isso criará arruma matriz referenciada de cadeias, onde estão todos os elementos dessa matriz null. (Como strings são tipos de referência )

Essa matriz contém os elementos de arr[0]para arr[4]. O newoperador é usado para criar a matriz e inicializar os elementos da matriz com seus valores padrão. Neste exemplo, todos os elementos da matriz são inicializados null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
fonte
Obrigado a todos ... não me pergunte por que, mas o único caminho era: string [] arr = new String [0] as string [];
aquanat 30/05
0

Se você deve criar uma matriz vazia, você pode fazer isso:

string[] arr = new string[0];

Se você não sabe sobre o tamanho, então você também pode usar List<string>, bem como

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Rahul
fonte
Eu sinto muito. Estraguei acidentalmente sua postagem com edições incorretas.
Soner Gönül
-3

O seguinte deve funcionar bem.

string[] arr = new string[] {""};
Karthikeyan Gunasheker
fonte
5
Essa não é uma matriz vazia, pois contém um elemento que é uma string vazia. arr.Length () retornará 1.
Guillermo Prandi
Pode não ser uma matriz vazia, mas acho que esta resposta é nula segura. Obrigado! 1 para cima!
precisa saber é o seguinte