linq选择new和string

时间:2012-12-18 21:04:34

标签: c# linq

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#的初学者,我错了,我期待这个输出:

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]] 

3 个答案:

答案 0 :(得分:4)

Char.IsDigit确定该字符是否为十进制数字。该字符串中没有十进制数字字符。您可以使用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());

答案 1 :(得分:3)

将字符转换为字符串的最简单方法是在字符上使用ToString

string构造函数没有重载,只需要一个字符或一个字符串。

您可以使用以下任何一项:

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 + '-';

答案 2 :(得分:0)

您可以使用以下内容:

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

您仍然需要修剪最后一个“ - ”以获得所需的确切输出。

我希望这会有所帮助