2010-05-25 7 views
7

Secondo Intellisense e MSDN doc on string.Split, non ci sono sovraccarichi senza parametri di string.Split. Eppure se inseriscoSovraccarico non documentato di string.Split()?

string[] foo = bar.Split(); 

Compila. E funziona. Ho verificato ciò sia in Visual Studio 2008 che in 2010. In entrambi i casi intellisense non mostra il sovraccarico senza parametri.

C'è una ragione per questo? Ci sono altri sovraccarichi mancanti dai documenti MSDN/Intellisense? Di solito la navigazione attraverso sovraccarichi in intellisense è il modo migliore per determinare quale sovraccarico utilizzare. Mi dispiacerebbe pensare che mi mancano altre opzioni disponibili in tutto il framework .Net.

MODIFICA: come mostrato sopra, si divide su spazi vuoti.

+0

ummm - neil - hai mai avuto una risposta alla tua domanda? lolzalot –

risposta

16

Questo perché Split ha un sovraccarico param. Non dare alcun parametro equivale a dare un array vuoto. In altre parole, chiami this overload.

"some text".Split(); 

è la stessa:

"some text".Split(new char[0]); 

Ecco the documentation on the params keyword. Come probabilmente saprai, è usato per dare a un metodo un numero variabile di parametri. Quel numero potrebbe essere zero.

+1

Un sacco di buone risposte, ma accetterò questa volta da quando è stato il primo. –

1
public string[] Split(params char[] separator) 

params è 0 o più

8

Scommetto che è corrispondenza questo String.Split sovraccarico:

public string[] Split(params char[] separator) 
{ 
    return this.Split(separator, 0x7fffffff, StringSplitOptions.None); 
} 

0 argomenti è accettabile per questa funzione. Dato senza separatori, it defaults to white space.

+0

+1 "default allo spazio bianco" ... grazie, avrei potuto giurare che era una virgola, ma poi il mio codice non ha funzionato come previsto. Deve aver ricordato Java. –

2

String.Split() ha un numero di sovraccarichi; hai ragione che nessuno di questi sovraccarichi è parametrico, tuttavia uno di questi è varadico: String.Split(params char[]). La porzione di lunghezza variabile dell'elenco di argomenti può essere un numero qualsiasi di argomenti, incluso lo zero: questo è il sovraccarico che stai invocando qui.

5

In realtà ciò che si sta chiamando qui è string.split (params char [] separatore)

params (C# reference)

È possibile inviare un elenco separato da virgole di argomenti del tipo specificato nel parametro dichiarazione, o una matrice di argomenti del tipo specificato. Non è inoltre possibile inviare argomenti.

3

Ha a che fare con un punto debole dell'esposizione dei parametri come "array di parametri []". Vedere la firma del metodo seguente come documentato in MSDN, quindi ovviamente stai passando in una matrice vuota.

public string[] Split(params char[] separator) 
Problemi correlati