2011-06-23 1 views
6

Je viens de trouver que non seulement ce code compile, il semble scinder la chaîne sur n'importe quel espace.Est-ce un remplacement non documenté de la méthode Split?

List<string> TableNames = Tables.Split().ToList(); 

Cependant, il n'a pas montré dans le IntelliSense et ce n'est pas sur le MSDN page.

Est-ce juste un remplacement non documenté? Et est-ce dangereux à utiliser à cause de cela?

Répondre

10

Ce n'est pas un remplacement. Dans ce cas, le compilateur convertit Split() en Split(char[]) avec un paramètre vide.

de Split is defined comme

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

params vous permet de spécifier un nombre variable d'arguments, y compris aucun argument. Si aucun argument n'est fourni (comme dans votre exemple), le tableau separator sera vide.

A partir de la page MSDN lien ci-dessus:

Si le paramètre de séparation est nul ou ne contient pas de caractères, des caractères espaces blancs sont supposés être les délimiteurs.

C'est pourquoi la chaîne est divisée sur les espaces. Ceci est juste un comportement par défaut plutôt qu'une fonctionnalité non documentée, donc vous êtes libre de l'utiliser sans crainte d'effets secondaires inhabituels. Eh bien, à moins que le comportement par défaut ne change dans une future version de .NET, mais cela me semble assez improbable puisque les espaces sont une valeur par défaut raisonnable.

+2

Battez-moi par quinze secondes. Malédictions! (+1) :) –

+0

+1 Yep, et 'ToList()' est une méthode d'extension de 'System.Linq'. – rsbarro

+0

Brillant et rapide! C'est pourquoi j'aime StackOverflow. –

3

De l'remarks to String.Split:

Si le paramètre de séparation est rien ou ne contient pas de caractères, des caractères espaces blancs sont supposés être les délimiteurs. Les caractères espace-blanc sont définis par la norme Unicode et renvoyer true s'ils sont transmis à la méthode Char.IsWhiteSpace .

Appel de I qui a documenté le comportement, personnellement. :)

Questions connexes