这就是我想要做的。使用由空格分隔的一系列数字。保存这些数字后,我想只返回一次所有数字的字符串,即使数字在序列中出现了多次。
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
答案 0 :(得分:6)
扩展方法IEnumerable.Distinct
不是谓词函数。它在IEnumerable<T>
上运行并返回一个新的IEnumerable<T>
,其中每个元素只出现一次。
要修复代码,请执行以下操作:
IEnumerable<string> distinctNumbers = tempNumbers.Distinct();
我想只返回一次所有数字的字符串
如果您希望将结果作为单个空格分隔的字符串,那么除了上述内容之外,您还需要调用string.Join
:
string result = string.Join(" ", distinctNumbers.ToArray());
txtResult.Text = result;
答案 1 :(得分:1)
其中(value =&gt; value.Distinct())将从tempNumbers中获取每个字符串进行评估。此外,字符串是字符集合。这就是为什么你可以将Distinct()应用到
值。
此外,Distinct()扩展方法的结果是和IEnumerable<T>
,其中T是char。因此整个操作导致异常。
为了获得不同的数字,您可以使用查询
var distinctNumbers = (from elem in tempNumbers
select elem).Distinct();
干杯