2010-05-25 17 views
7

Según Intellisense y MSDN doc on string.Split, no hay sobrecargas sin parámetros de cadena. División. Sin embargo, si escriboSobrecarga no documentada de string.Split()?

string[] foo = bar.Split(); 

Compila. Y funciona. Lo he verificado tanto en Visual Studio 2008 como en 2010. En ambos casos, intellisense no muestra la sobrecarga sin parámetros.

¿Hay alguna razón para esto? ¿Hay otras sobrecargas faltantes de los documentos de MSDN/Intellisense? Por lo general, la navegación a través de sobrecargas en intellisense es la mejor forma de determinar qué sobrecarga usar. Odiaría pensar que me faltan otras opciones disponibles a través del framework .Net.

EDITAR: como se muestra arriba, se divide en espacios en blanco.

+0

ummm - neil - ¿Alguna vez ha respondido a su pregunta? lolzalot –

Respuesta

16

Eso es porque Split tiene una sobrecarga de params. No dar ningún parámetro es lo mismo que dar una matriz vacía. En otras palabras, está llamando al this overload.

"some text".Split(); 

es lo mismo que:

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

Aquí es the documentation on the params keyword. Como probablemente sepa, se usa para dar a un método una cantidad variable de parámetros. Ese número puede ser cero.

+1

Muchas buenas respuestas, pero lo aceptaré una vez ya que fue el primero. –

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

params es 0 o más

8

Seguro que es búsqueda de esta sobrecarga String.Split:

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

0 argumentos es aceptable para esta función. Dado que no hay separadores, it defaults to white space.

+0

+1 "predeterminado en el espacio en blanco" ... gracias, podría haber jurado que era una coma, pero luego mi código no funcionó como esperaba. Debe haber estado recordando a Java. –

2

String.Split() tiene una serie de sobrecargas; tiene razón en que ninguna de esas sobrecargas tiene parámetros, sin embargo, una de ellas es varadica: String.Split(params char[]). La porción de longitud variable de la lista de argumentos puede ser cualquier cantidad de argumentos, incluido cero: esa es la sobrecarga que está invocando aquí.

5

En realidad lo que está llamando aquí es string.split (params char [] separador)

params (C# reference)

Puede enviar una lista separada por comas de los argumentos del tipo especificado en el parámetro declaración, o una matriz de argumentos del tipo especificado. También puede enviar ningún argumento.

3

Tiene que ver con una debilidad de los parámetros de exposición como 'params array []'. Consulte la firma del siguiente método como está documentado en MSDN, por lo que obviamente está pasando una matriz vacía.

public string[] Split(params char[] separator) 
Cuestiones relacionadas