繁体   English   中英

LINQ选择新的和字符串

[英]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.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());

将字符转换为字符串的最简单方法是在字符上使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM