2012-12-18 34 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class TestIO 
    { 
     static void Main() 
     { 
      string line = "first-main-in-c#"; 

      var stringQuery = from ch in line where Char.IsDigit(ch) select new string(ch + '-'); 

      foreach (var c in stringQuery) 
       Console.Write(c); 
      Console.WriteLine(System.Environment.NewLine + "Press any key to exit"); 

      Console.ReadKey(); 
     } 
    } 
} 

我是C#初学者,什么是我的错,我希望这样的输出:LINQ选择新的字符串

f-i-r-s-t-m-a-i-n-i-n-c 

,但我得到:

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Char,<>f__Anonymou 
sType0`1[System.Int32]] 
+1

什么是错误? – asawyer

+0

为什么downvote?我编辑过。 – Guillaume07

回答

5

字符.Isigigit确定字符是否是十进制数字。该字符串中没有十进制数字字符。您可以使用Char.IsLetterChar.IsLetterOrDigit,具体取决于您是否要包含数字。

您还在不存在的字符串上调用构造函数。你可以使用带有char数组的那个。

最后,查询将返回一串字符串。为了得到期望的结果(如你说一个字符串),考虑到上述帐户中的代码,可能是:

string line = "first-main-in-c#"; 
var stringQuery = from ch in line where Char.IsLetter(ch) select new string(new char[] {ch, '-'}); 
string result = String.Join("", stringQuery); 

然而,这将包括 - 在最后,你需要修剪掉。 String.Join连接字符串的隔膜,所以要得到你想要的结果,这可能是简单的:

string line = "first-main-in-c#"; 
var result = String.Join("-", from ch in line where Char.IsLetter(ch) select ch.ToString()); 
+0

对不起,但在我的字符串'线','f'例如是字母数字,但'#'不是 – Guillaume07

+0

意图有点术语丢失,请参阅更新的答案:-) – driis

+0

是的谢谢你的答案 – Guillaume07

3

,最简单的方法来转换字符到字符串是在字符上使用ToString

只有一个字符或字符串的构造函数没有超载。

你可以使用任何的以下内容:

char c = 'a'; 

string s = c.ToString(); 
s = new string(c, 1); 
s = new string(new[] { c }); 
s = c + ""; 

既然你把两个人物一起,你已经有了一个字符串,所以有摆在首位不需要new string

var stringQuery = from ch in line 
        where Char.IsDigit(ch) 
        select ch + '-'; 
0

您可以使用以下方法:

var stringQuery = from ch in line where Char.IsLetter(ch) select ch + "-"; 

您仍然需要修剪过的最后一个“ - “来获得你想要的确切输出。

我希望这有助于