2009-10-22 5 views
0

Je modifie le tableau de chaînes dans la collection de dictionnaires.Erreur d'affectation dans LINQ

string str = "When everybody is somebody then no one is anybody"; 

       char[] separation = { ' ', '.', ',' }; 

       var splitted=str.Split(separation); 

(Absolument ce n'est pas une bonne conception, mais je veux connaître la logique)

Quand je construis requête

var indexed = (from i in Enumerable.Range(1, splitted.Length) 
       from strn in splitted 
       select new { i, strn }).ToDictionary(x => x.i, x => x.strn); 

J'ai reçu "Key already found in dictionary". Je fournis des clés uniques en tant que valeurs énumérées .

Répondre

1

Non, vous ne fournissez pas de clés uniques. Vous fournir:

1 When 
2 When 
3 When 
... 
9 When 
1 everybody 
2 everybody 

etc

... de sorte que vous donnerez à « 1 » comme une clé deux fois (alors vous fournissiez « 2 » comme une clé à nouveau si vous avez pu vous aussi loin).

Quel résultat tentez-vous d'atteindre? Si c'est: 1 -> Quand, 2 -> tout le monde etc alors vous voulez:

var indexed = splitted.Select((value, index) => new { value, index }) 
         .ToDictionary(x => x.index + 1, x => x.value); 
+0

1 quand, 2 Tout le monde, 3 est, 4 quelqu'un, 5 puis 6 personne, 7 est, 8 personne – udana

+0

oh !! ! Choisit-il toutes les combinaisons possibles (1, quand), (2, quand) ... dieu! – udana

+0

Vous n'avez fourni aucune valeur pour index, alors comment avez-vous atteint le résultat ???? Est-ce la magie du compilateur? De plus, aucune plage de début et de fin n'est spécifiée !!! Assez étonnant.S'il vous plaît, laissez-moi savoir le processus. – udana