2017-09-13 50 views
0

我想只有我的字符串中的數字部分是:無法獲得僅與LINQ查詢數字

Hello World 5 

所以其結果必然是:5

我所做的是:

var temp = from c in "Hello World 5" 
      select c 
      where Char.IsDigit(c); 

但我在c上得到一個錯誤,編譯器需要一個;但我不明白爲什麼,查詢沒有結束。

回答

4

順序爲from - where - select,所以你應該重新排序whereselect

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" 
+0

謝謝,但爲什麼我得到EnumerableIterator作爲結果? –

+0

@MarioSerda:你期待什麼結果? –

+0

我需要提取5 –

1

你的語法是錯誤的,select屬於底:

var temp = from c in "Hello World 5" 
      where Char.IsDigit(c) 
      select c; 

既然你在錯誤的位置移動select,編譯器之前的預期(當時還意外)where一個;


注意temp不是一個單獨的字符,但是含有單元素'5'的序列。