【发布时间】:2020-05-12 03:13:13
【问题描述】:
我有以下代码:
using System;
class Token
{
static void Main()
{
Console.Write("Enter string to tokenize: ");
string s = Console.ReadLine();
Console.WriteLine("\nString length: {0}\n\nTokens:", s.Length);
string[] tok = s.Split(' ', StringSplitOptions.RemoveEmptyEntries); //<-- this line causes CS1503
//string[] tok = s.Split(); //works but also returns empty entries
foreach (string i in tok)
Console.WriteLine("{0}", i);
Console.Write("\n{0} tokens found\nPress any key to continue . . . ", tok.Length);
Console.ReadKey();
}
}
代码应该从控制台输入中获取一个字符串并将其拆分为标记(由空格分隔)。我正在使用String.Split() 方法。默认情况下,此方法返回所有空标记(如果有多个连续的分隔符),这是我不想要的。根据MSDN,这个方法有一堆重载。不带参数的默认String.Split() 调用此重载:
public string[] Split(params char[] separator);
有一个不返回空标记的重载:
public string[] Split(char separator, StringSplitOptions options = System.StringSplitOptions.None);
据我了解,为了让它不返回空令牌,第二个参数必须是StringSplitOptions.RemoveEmptyEntries。所以直观的称呼方式是:
s.Split(' ', StringSplitOptions.RemoveEmptyEntries);
然而,编译器不这么认为,并向我抛出错误 CS1503:
CS1503: Argument 2: cannot convert from 'System.StringSplitOptions' to 'char'
所以很明显编译器没有选择我想要的重载。将鼠标悬停在函数调用上会使 IntelliSense 向我显示:
string[] Split(params char[] separator)
我应该如何调用String.Split() 来调用我想要的重载?
【问题讨论】:
-
链接的文章是针对.net core的。只是为了确认一下,这是您的目标项目吗?
-
第一个参数是
char[], ->s.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries); -
Split(char, StringSplitOptions)是在 .NET Core 2.0 中引入的。在那之前,最好的重载是Split(char[], StringSplitOptions),你可以称之为s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)。你的目标是什么? -
我认为 .net core 只是一套基本的 .net 框架,可以在更多平台上使用。它不应该在windows(.net framework 4.7.2)中编译吗?
-
我认为您正在考虑.NET Standard(它定义了一组可在多个平台上使用的 API)。 .NET Core 实际上是一个新的(嗯,不再是新的)重写的运行时,它取代了 .NET Framework,同时还针对更多平台。自从上一版 .NET Framework 发布以来,.NET Core 中引入了很多东西。在下一个版本中,它将更名为 .NET 5。