[英]linq select new and string
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]]
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());
将字符转换为字符串的最简单方法是在字符上使用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 + '-';
您可以使用以下内容:
var stringQuery = from ch in line where Char.IsLetter(ch) select ch + "-";
您仍然需要修剪最后一个“-”以获取所需的确切输出。
我希望这有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.