Sans initialisation, comment est-il possible d'affecter des valeurs à des tableaux?Affectation de valeur en C#
string[] s={"all","in","all"};
I mean why did not the compile show error?.Normally we need to
initialize ,before assign values.
Sans initialisation, comment est-il possible d'affecter des valeurs à des tableaux?Affectation de valeur en C#
string[] s={"all","in","all"};
I mean why did not the compile show error?.Normally we need to
initialize ,before assign values.
C'est juste du sucre syntaxique.
Ce:
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 de tableau n'est pas affecté à s
jusqu'à ce que tous les éléments ont été assignés.Ce n'est pas important dans ce cas particulier où nous déclarer une nouvelle variable , mais il ferait un autre dans cette situation:
string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };
en est de même pour objet et collecte initializers - la variable est seulement attribué à la fin.
Est-ce que cette relaxation est seulement pour Array? – user193276
ooh J'ai trouvé un bug dans le code de John Skeet! s n'est pas défini, ligne 2. Je pense que vous vouliez dire tmp [0] = "all"; –
Doh - thanks :) –
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 de détails.
Il est possible de déclarer une variable de tableau sans initialisation.
Check this out http://msdn.microsoft.com/en-us/library/0a7fscd0%28VS.71%29.aspx
Je pense que vous voulez savoir pourquoi
string[] s={"all","in","all"};
fonctionne quand vous attendez à être nécessaire pour initialiser le tableau d'abord 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, donc il le fait dans les coulisses pour vous. Tout comme le mot-clé var
, le but est de limiter la quantité d'informations redondantes que vous devez taper.
Est-ce que cette relaxation est uniquement pour les tableaux? Pesron a = {Nom = "nom de famille"} ?? – user193276
Vous n'êtes pas "en train d'affecter une valeur au tableau". Vous initialisez une variable de type "reference to array". La valeur avec laquelle vous l'initialisez est une référence à un tableau qui a été créé par l'utilisation de la syntaxe d'initialisation de short array {...}
. 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éduite du type de variable.
Vous n'avez pas besoin la nouvelle chaîne [] partie en C# 3 ou plus - cela fonctionne bien
string[] s = { "all","in","all"};
Il est juste un cas du compilateur d'être un peu plus intelligent et travailler ce que vous voulez dire - l'arrière IL sera le même.
Vous pouvez le faire simplement parce que c'est autorisé, cela n'est pas nécessaire en deux étapes, donc c'est le raccourci. Considérez cela comme du sucre.
Tout comme vous avez montré ... Ou je ne comprends pas la partie de la question ici. –
Je ne suis pas sûr d'avoir la question. –
Avons-nous découvert l'équivalent stackoverflow de 'comment se forme babby?' – Chris