2010-07-11 5 views
2

Voici ce que j'essaie de faire. Avoir une utilisation juste une séquence de nombres délimités par des espaces. Après avoir sauvegardé ces nombres, je veux retourner une chaîne de tous les nombres une seule fois, même si un nombre est apparu n nombre de fois dans la séquence.Utilisation de Linq pour renvoyer chaque élément une seule fois

string[] tempNumbers = textValue.Split(' '); 

IEnumerable<string> distinctNumbers = tempNumbers.Where(value => value.Distinct()); 

Je reçois cette erreur:

Error 2 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<char>' to 'bool' c:\users\sergio\documents\visual studio 2010\Projects\LinqPlayground\LinqPlayground\SetSemanticsExample.cs 67 75 LinqPlayground 

Répondre

6

La méthode d'extension IEnumerable.Distinct n'est pas une fonction sous-jacente. Il fonctionne sur un IEnumerable<T> et renvoie un nouveau IEnumerable<T> où chaque élément n'apparaît qu'une seule fois.

Pour corriger votre code il suffit de faire ceci:

IEnumerable<string> distinctNumbers = tempNumbers.Distinct(); 

I want to return a string of all the numbers only once

Si vous voulez que le résultat comme une seule chaîne séparés par un espace, puis, en plus de ce qui précède, vous devrez également appeler string.Join:

string result = string.Join(" ", distinctNumbers.ToArray()); 
txtResult.Text = result; 
+0

Je fais ce qui suit, mais je ne reçois pas les valeurs de la IEnumarable, seul le nom du type est placé dans la zone de texte. txtResult.Text = distinctNumbers.ToList(). ToString(); –

+0

@Sergio Tapia: C'est parce que la méthode ToString d'une liste n'affiche que le nom du type, pas le contenu de la liste. Voir ma mise à jour à la réponse. –

1

Où (valeur => value.Distinct()) prendra chaque chaîne de la tempNumbe rs à évaluer. En outre, la chaîne est une collection de caractères. Voilà pourquoi vous pouvez appliquer le Distinct() au

value.

De plus, le résultat de la méthode d'extension Distinct() est et IEnumerable<T>, où T est char ici. D'où toute l'opération provoque l'exception.

Afin d'obtenir des chiffres distincts, vous pouvez utiliser la requête

var distinctNumbers = (from elem in tempNumbers 
         select elem).Distinct(); 

Vive

Questions connexes