2010-07-11 4 views
2

Вот что я пытаюсь сделать. Используйте правильную последовательность чисел, помеченных пробелами. После сохранения этих чисел я хочу вернуть строку всех чисел только один раз, даже если число появилось n раз в последовательности.Использование Linq для возврата каждого элемента только один раз

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

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

Я получаю эту ошибку:

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 

ответ

6

Метод расширения IEnumerable.Distinct не является функцией предиката. Он работает на IEnumerable<T> и возвращает новый IEnumerable<T>, где каждый элемент появляется только один раз.

Чтобы исправить код просто сделать это вместо того, чтобы:

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

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

Если вы хотите результат в виде единого пространства, разделенных строки, то в дополнение к вышесказанному вы также должны позвонить string.Join:

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

я делаю следующее, но я не получаю значения IEnumarable, только имя типа помещается в текстовое окно. txtResult.Text = distinctNumbers.ToList(). ToString(); –

+0

@Sergio Tapia: Это потому, что метод ToString List отображает только имя типа, а не содержимое списка. См. Мое обновление ответа. –

1

Где (значение => value.Distinct()) будет принимать каждую строку из tempNumbe rs для оценки. Кроме того, строка представляет собой набор символов. Именно поэтому вы можете применить Distinct() к

value.

Кроме того, результат Distinct() метод расширения и IEnumerable<T>, где Т голец здесь. Следовательно, вся операция вызывает исключение.

Для того, чтобы получить различные числа, вы можете использовать запрос

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

Приветствия