我想只获取字符串中的数字部分:
Hello World 5
所以结果必须是:5
我做的是:
var temp = from c in "Hello World 5"
select c
where Char.IsDigit(c);
但我在c
上收到错误,编译器需要;
,但我不明白为什么,查询还没有结束。
答案 0 :(得分:4)
订单为from
- where
- select
,因此您应重新排序where
和select
:
var temp = from c in "Hello World 5" where Char.IsDigit(c) select c;
这在csharp
交互式shell中生成:
csharp> var temp = from c in "Hello World 5" where Char.IsDigit(c) select c;
csharp> temp
{ '5' }
因此这是IEnumerable<Char>
:
csharp> temp.GetType();
System.Linq.Enumerable+WhereEnumerableIterator`1[System.Char]
您也可以使用等效的函数调用,在这种情况下,select
不是必需的:
var temp = "Hello World 5".Where(Char.IsDigit);
编辑:如果您希望将LINQ查询的结果连接到一个字符串,可以使用String.Concat
:
csharp> String.Concat("Hello World 5".Where(Char.IsDigit));
"5"
csharp> String.Concat(from c in "Hello World 5" where Char.IsDigit(c) select c);
"5"
答案 1 :(得分:1)
您的语法错误,select
属于最后:
var temp = from c in "Hello World 5"
where Char.IsDigit(c)
select c;
由于您将select
移到了错误的位置,因此编译器需要;
之前(然后也是意外的)where
。
请注意,temp
不是单个字符,而是包含单个元素'5'
的序列。