Assignation de valeur en C #
-
05-07-2019 - |
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.
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.