2013-07-29 36 views
6

爲什麼"my,string".Split(',')工作在.NET C#中?爲什麼「我的,字符串」.Split(',')在.NET中工作C#

根據MSDN的分割聲明是Split(Char[])MSDN String.Split Method

我假定C#5中的單個字符','轉換爲char[] {','}; 但我一定是錯的,因爲下面的代碼不起作用:

static void Main() 
{ 
    GetChar(','); 
} 

static char GetChar(char[] input) 
{ 
    return input[0]; 
} 

編輯:多虧了喬恩斯基特的回答,我改變了參數params char[]和它的作品證明的概念。

static char GetChar(params char[] input) 
{ 
    return input[0]; 
} 
+6

請注意'Split'方法原型中的'params'關鍵字,它表明該方法可以將可變數量的'char'參數組合成單個數組。 – RogerN

+1

在C#中,當你在單個字符周圍使用單引號時被解釋爲char(而不是char [])。雙引號表示一個字符串。 – HitLikeAHammer

回答

21

overload you're using使用parameter array,基本上是這樣。這就是params的一部分。編譯器自動將你的單個參數包裝到一個數組中。所以這樣的:

var x = text.Split(','); 

等同於:

var x = text.Split(new char[] { ',' }); 

您可以使用自己的方法參數數組也與params關鍵字:

static char GetChar(params char[] input) 
{ 
    return input[0]; 
} 

注意參數數組必須是最後的參數。這就是爲什麼你使用的過載只能使用參數數組Split超載。看看其他重載:

Split(Char[], Int32) 
Split(Char[], StringSplitOptions) 
Split(String[], StringSplitOptions) 
Split(Char[], Int32, StringSplitOptions) 
Split(String[], Int32, StringSplitOptions) 

在每種情況下,該陣列是第一參數,所以你要自己構建一個數組:

var x = text.Split(new char[] { ',' }, 10); // Call the (char[], int) overload 

或使用隱式類型array:

var x = text.Split(new[] { ',' }, 10); // Call the (char[], int) overload 
4

被調用的實際過載是this one。請注意,頁面頂部的標題具有誤導性,實際上它需要params char[]而不是char[]。這允許你通過分隔符"my, string".Split(',', ' '),而不是讓你跳過使用"my, string".Split(new char[] { ',', ' ' })第一圈。

相關問題