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]]
答案 0 :(得分:4)
Char.IsDigit确定该字符是否为十进制数字。该字符串中没有十进制数字字符。您可以使用Char.IsLetter
或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());
答案 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 + "-";
您仍然需要修剪最后一个“ - ”以获得所需的确切输出。
我希望这会有所帮助