2010-07-11 47 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(); – 2010-07-11 23:21:58

+0

@Sergio Tapia:這是因爲List的ToString方法只顯示類型名稱,而不是列表的內容。看到我的更新回答。 – 2010-07-11 23:24:23

1

凡(值=> value.Distinct())將採取各字符串從tempNumbe rs來評估。此外,該字符串是一個字符集合。這就是爲什麼你可以含混()適用於

value.

而且鮮明的()擴展方法的結果是與IEnumerable<T>,其中T是char這裏。因此整個操作導致異常。

爲了得到不同的數字,你可以使用查詢

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

乾杯