我很困惑哪个过载string.Split(';')
正在解决;我不认为3210是一个char数组吗?为什么string.Split(';')有效,但string.Split(':',StringSplitOptions.RemoveEmptyEntries)不是?
但是,这是编译好,但如果我尝试添加第二个StringSplitOptions
参数没有找到适当的过载。
我不喜欢不得不做new char []{';'}
是否可以避免?
我很困惑哪个过载string.Split(';')
正在解决;我不认为3210是一个char数组吗?为什么string.Split(';')有效,但string.Split(':',StringSplitOptions.RemoveEmptyEntries)不是?
但是,这是编译好,但如果我尝试添加第二个StringSplitOptions
参数没有找到适当的过载。
我不喜欢不得不做new char []{';'}
是否可以避免?
在第一种情况下,你使用这个方法:
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只是编译器的一个暗示,你可以传递你的数组的项目,而不用明确地实例化数组。但是,每次调用Split方法时都会创建一个包含参数的新数组,无论您传递的是0,1还是多个参数。此外,您仍然可以自己创建一个数组并将其传递给该方法,但这可以让编译器为您完成。
谢谢。你会添加一些关于'params'在这里做些什么的信息,以便对未来做出更全面的回答?简介是好的:) –
我已经添加了链接,您可以在其中找到有关此元素的更多信息。我不会详细说明这个主题,因为它是一个具有相应文档的简单语言元素。 –
@ Mr.Boy:'params'的文档实际上并不能解释*数组的创建方式/时间,所以这可能是令人困惑的。问题是'params'只是编译器的一个提示,即你可以传递你的数组的项目,而不用显式地实例化数组。但是,每次调用“Split”方法时都会创建一个包含参数的新数组,无论您传递的是0,1还是多个参数。此外,您仍然可以自己创建一个数组并将其传递给该方法,但这可以让编译器为您完成。 – Groo
的String.Split()
的first overload已参数定义为
PARAMS炭[]隔板
这意味着可以通过任何数量的char
参数和它的工作:
someString.Split('1', '2', '3');
// or just one separator
someString.Split(';');
的second overload是不同的,它定义了这样
炭[]分离器参数,StringSplitOptions选项
通知,没有params
。这需要你通过char[]
参数:
someString.Split(new[] {'1', '2', '3'}, StringSplitOptions.None);
// or just one separator
someString.Split(new[] {';'}, StringSplitOptions.None);
它** **是一个*字符数组*:'斯普利特(PARAMS的char []值)' –
什么是 'PARAMS' 关键字表示 - 怎么样了; “数组?为什么第二版不适用? –
至少,你可以做'new [] {';' }'。 –