我很困惑哪个重载string.Split(';')
正在解决;我认为';'
不是char数组吗?
但是,这是正常编译,但如果我尝试添加第二个StringSplitOptions
参数,则找不到合适的重载。
我不喜欢这样做new char []{';'}
是否可以避免?
答案 0 :(得分:10)
String.Split()
first overload的参数定义为
参数 char []分隔符
这意味着您可以传递任意数量的char
参数,它将起作用:
someString.Split('1', '2', '3');
// or just one separator
someString.Split(';');
second overload不同,它定义了像这样的参数
char [] separator,StringSplitOptions选项
注意,没有params
。这需要您传递char[]
参数:
someString.Split(new[] {'1', '2', '3'}, StringSplitOptions.None);
// or just one separator
someString.Split(new[] {';'}, StringSplitOptions.None);
答案 1 :(得分:1)
在第一种情况下,您使用的是此方法:
public string[] Split(params char[] separator)
在第二种情况下:
public string[] Split(char[] separator, StringSplitOptions options)
正如您所看到的,第二种情况下的声明略有不同,因此您无法以这种方式传递参数。
如果您想以类似的方式使用此方法,您可以编写自己的扩展方法:
public static class StringExtensions
{
public static string[] Split(this string s, char separator, StringSplitOptions options)
{
return s.Split(new[] { separator }, options);
}
//or
public static string[] Split(this string s, StringSplitOptions options, params char[] separator)
{
return s.Split(separator, options);
}
}
并使用它们如下:
var s = "asdasd;asd;;";
var split = s.Split(StringSplitOptions.RemoveEmptyEntries, ';');
var split2 = s.Split(StringSplitOptions.RemoveEmptyEntries, ';', ',');
var split3 = s.Split(';', StringSplitOptions.RemoveEmptyEntries);
我建议你阅读更多有关这些元素的内容:
@Groo params关键字解释:
params的文档实际上并没有解释阵列创建的方式/时间,因此可能会让人感到困惑。问题是params只是对编译器的一个提示,允许您传递由逗号分隔的数组项,而不显式实例化数组。但是,无论您是传递0,1还是多个参数,都会在每次调用Split方法时创建包含参数的新数组。此外,您仍然可以自己创建一个数组并将其传递给该方法,但这可以让编译器为您完成。