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# 的初学者,我的错误是什么,我期望这个输出:

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

3 回答 3

4

Char.IsDigit 确定字符是否为十进制数字。该字符串中没有十进制数字字符。您可以使用Char.IsLetteror Char.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());
于 2012-12-18T21:08:59.640 回答
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 + '-';
于 2012-12-18T21:07:07.137 回答
0

您可以使用以下内容:

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

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

我希望这有帮助

于 2012-12-18T21:12:18.230 回答