Est-il possible de le faire en C#?Instanciation d'une file d'attente en utilisant {a, b, c} possible en C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
ou est-ce que je dois d'abord produire un tableau pour cela?
Est-il possible de le faire en C#?Instanciation d'une file d'attente en utilisant {a, b, c} possible en C#?
Queue<string> helperStrings = {"right", "left", "up", "down"};
ou est-ce que je dois d'abord produire un tableau pour cela?
Non, vous ne pouvez pas initialiser une file d'attente de cette manière.
Quoi qu'il en soit, vous pouvez faire quelque chose comme ceci:
var q = new Queue<string>(new[]{ "A", "B", "C" });
et cela, évidemment, les moyens de passer à travers un tableau.
Comme Queue<T>
ne met pas en œuvre une méthode « Ajouter », vous aurez besoin d'instancier un IEnumerable<string>
dont il peut être initialisé:
Queue<string> helperStrings
= new Queue<string>(new List<string>() { "right", "left", "up", "down" });
Est-il possible de le faire en C#?
Malheureusement non. La règle pour les initialiseurs de collection en C# est que l'objet doit (1) implémenter IEnumerable, et (2) avoir une méthode Add. La collection initialiseur
new C(q) { r, s, t }
est réécrite comme
temp = new C(q);
temp.Add(r);
temp.Add(s);
temp.Add(t);
et entraîne alors tout ce qui est en température.
Queue<T>
implémente IEnumerable mais n'a pas de méthode Add; il a une méthode Enqueue.
Merci pour cette explication, qui aide beaucoup à comprendre la mécanique sous-jacente. – xeophin
Donc, les ingalisateurs de collecte sont essentiellement des sucres syntaxiques, n'est-ce pas? – digEmAll
@digEmAll: c'est correct. La douceur du sucre ici est double. D'abord, qu'ils sont très compacts. Deuxièmement, qu'ils transforment ce qui aurait été auparavant un tas de déclarations en une expression; Cela signifie que vous pouvez les utiliser dans des contextes où seule une expression est valide, comme un initialiseur de champ ou une requête LINQ. –
+1 Oui, vous créez un tableau en premier, mais il semble joli :) – Onkelborg
Ok ... aurait été trop pratique pour être vrai;) Merci! – xeophin
Cette méthode ne nécessite-t-elle pas le déballage des chaînes? La nouvelle liste {"A", "B", "C"} serait-elle meilleure? –