Question

Sans initialisation, comment est-il possible d'attribuer des valeurs aux tableaux?

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

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
Était-ce utile?

La solution

C'est juste du sucre syntaxique.

Ceci:

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

est compilé dans le même code que:

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

Notez que la référence au tableau n'est affectée à s que lorsque tous les éléments ont été affectés. Ce n'est pas important dans le cas particulier où nous déclarons une nouvelle variable, mais cela serait différent dans cette situation:

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

Il en va de même pour les initialiseurs d'objet et de collection - la variable n'est affectée qu'à la fin.

Autres conseils

Il est possible de déclarer une variable de tableau sans initialisation.

Découvrez ceci http://msdn.microsoft.com/en- us / library / 0a7fscd0% 28VS.71% 29.aspx

Vous n'êtes pas "en train d'affecter une valeur à un tableau". Vous initialisez une variable de type "référence à un tableau". La valeur avec laquelle vous l'initialisez est une référence à un tableau créé à l'aide de la syntaxe d'initialisation de tableau courte {...} . Bien qu'il ne soit autorisé que dans l'initialiseur de variables de type tableau, il est exactement équivalent à new T [] {...} , où T est déduit du type de variable .

Je pense que vous voulez savoir pourquoi

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

fonctionne lorsque vous vous attendez à devoir initialiser le tableau comme ceci:

string[] s = new string[];

ou

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

La réponse est juste la magie du compilateur. Le compilateur sait, en fonction de l'initialisation, quelle est la taille du tableau, il le fait donc en coulisse pour vous. Comme pour le mot clé var , le but est de limiter la quantité d'informations redondantes que vous devez taper.

La partie {"tout", "dans", "tout"} est l'initialisation. la partie new string [] peut être omise car les accolades et la chaîne sont en notation abrégée. Consultez MSDN sur les tableaux à une dimension.

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

et sa version abrégée

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

sont la même chose. Voir MSDN (section Initializing Arrays) pour plus d'informations. détail.

Vous n'avez pas besoin de la nouvelle chaîne [] dans C # 3 ou supérieure - cela fonctionne correctement

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

Le compilateur est un peu plus intelligent et comprend ce que vous voulez dire - le back-end IL sera le même.

Vous pouvez le faire simplement parce que c'est autorisé. Cela n'est pas nécessaire en deux étapes, c'est donc un raccourci. Considérez cela comme du sucre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top