Pergunta

Sem inicialização como é possível para valores atribuir a matrizes?

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
Foi útil?

Solução

É apenas açúcar sintático.

Este:

string[] s = {"all","in","all"};

é compilado para o mesmo código como:

string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

Note que a referência de matriz não é atribuído a s até que todos os elementos tenham sido atribuídos. Isso não é importante neste caso particular em que estamos declarando um new variável, mas que faria uma diferente nesta situação:

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

O mesmo é verdadeiro para objetos e coleta de initializers -. A única variável é atribuído no final

Outras dicas

É possível declarar uma variável de matriz sem inicialização.

Veja isto http://msdn.microsoft.com/en- us / library / 0a7fscd0% 28VS.71% 29.aspx

Você não é "atribuir um valor a variedade". Está inicializar uma variável do tipo "referência à variedade". O valor com o qual você inicializar é uma referência a uma matriz que foi criado através da utilização de gama curta initializer {...} sintaxe. Embora seja apenas permitida em initializer de variáveis ??do tipo array, é exatamente equivalente a new T[] { ... }, onde T é deduzida a partir tipo de variável.

Eu acho que você quer saber por que

 string[] s={"all","in","all"};

funciona quando você esperaria ser necessário inicializar a matriz primeiro como esta:

string[] s = new string[];

ou

string[] s = new string[] {"all","in","all"};

A resposta é mágica apenas compilador. O compilador sabe baseada na inicialização quão grande para fazer a matriz para que ele só faz isso nos bastidores para você. Muito parecido com a palavra-chave var, o ponto é para limitar a quantidade de informação redundante você é obrigado a tipo.

A parte {"all","in","all"} é a inicialização. a parte new string[] pode ser omitido porque as chaves e cordas são notação mão curta. Dê uma olhada na MSDN na Dimensão Arrays simples.

string[] s = new string[] { "all","in","all"};

e sua versão abreviada

string[] s = {"all","in","all"};

são a mesma coisa. Consulte MSDN (Inicializar Arrays seção) para mais detalhes.

Você não precisa a nova string [] parte em C # 3 ou superior - isso funciona bem

string[] s = { "all","in","all"};

É apenas um caso do compilador a ser um pouco mais inteligente e trabalhar para fora o que quer dizer -. A extremidade traseira IL será o mesmo

Você pode fazê-lo simplesmente porque ele é permitido, fazê-lo em duas etapas não é necessário que esta é a taquigrafia. Considere-açúcar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top