atribuição de valor em C #
-
05-07-2019 - |
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.
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.