2015-10-14 79 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