2015-10-14 111 views
4

我很困惑哪个过载string.Split(';')正在解决;我不认为​​3210是一个char数组吗?为什么string.Split(';')有效,但string.Split(':',StringSplitOptions.RemoveEmptyEntries)不是?

但是,这是编译好,但如果我尝试添加第二个StringSplitOptions参数没有找到适当的过载。

我不喜欢不得不做new char []{';'}是否可以避免?

+6

它** **是一个*字符数组*:'斯普利特(PARAMS的char []值)' –

+0

什么是 'PARAMS' 关键字表示 - 怎么样了; “数组?为什么第二版不适用? –

+3

至少,你可以做'new [] {';' }'。 –

回答

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); 

我建议你阅读更多这个元素:

  1. string.Split()
  2. params keyword
  3. params关键字的解释:link

@Groo params关键字的解释:

的PARAMS该文档实际上并没有解释如何/当数组被创建的,所以这是可能是混乱。问题是params只是编译器的一个暗示,你可以传递你的数组的项目,而不用明确地实例化数组。但是,每次调用Split方法时都会创建一个包含参数的新数组,无论您传递的是0,1还是多个参数。此外,您仍然可以自己创建一个数组并将其传递给该方法,但这可以让编译器为您完成。

+0

谢谢。你会添加一些关于'params'在这里做些什么的信息,以便对未来做出更全面的回答?简介是好的:) –

+0

我已经添加了链接,您可以在其中找到有关此元素的更多信息。我不会详细说明这个主题,因为它是一个具有相应文档的简单语言元素。 –

+1

@ Mr.Boy:'params'的文档实际上并不能解释*数组的创建方式/时间,所以这可能是令人困惑的。问题是'params'只是编译器的一个提示,即你可以传递你的数组的项目,而不用显式地实例化数组。但是,每次调用“Split”方法时都会创建一个包含参数的新数组,无论您传递的是0,1还是多个参数。此外,您仍然可以自己创建一个数组并将其传递给该方法,但这可以让编译器为您完成。 – Groo

8

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); 
+2

我可能在这里做错了什么,但是我的编译器不喜欢'new {';'}'的例子。它希望'new [] {';'}'。 – Mels

+0

@梅尔,编辑答案,谢谢。 – Sinatr