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?


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[] {};

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];

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>();

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


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)


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];

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)


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();

Eu sinto muito. Estraguei acidentalmente sua postagem com edições incorretas.
Soner Gönül

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.