C# Est-il possible d'avoir la valeur null params?
public void Foo(params string[] values)
{
}
Est-il possible que values
peut jamais être null
, ou cela est-il toujours être réglé avec 0
ou plusieurs éléments?
- Eh bien, je ne sais pas comment vous pouvez passer la valeur null à cette fonction et l'attribuer à des valeurs. Je suppose que je suis en demandant "est-il possible de faire cela?"
Foo(null)
peut être vaut la peine d'essayer.- "L'essayer" à peine donne jamais de réponse définitive. Un
params
méthode peut être appelée de plusieurs façons, ce qui en fait une question valable. - Supposons que vous aussi vous avez un supplément de surcharge "public void Foo(object value){}" et vous appelez "Foo(null)" -- que pensez-vous qui se passe maintenant, et pourquoi? Essayez -- étiez-vous droit?
- Foo(null) dans ce cas, produire des valeurs = string[]{ null }, Foo((string[])null), VA produire des valeurs = null, cependant.
Vous devez vous connecter pour publier un commentaire.
Absolument - vous pouvez l'appeler avec un argument de type string[] avec une valeur null:
null
littérale),values
sera exactement que. D'autre part, si vous passez un string de référence qui se trouve être nulle, ce sera un tableau de longueur 1 comme vous l'avez dit.Foo()
. Vous pouvez le vérifier mon raisonnement dans mon désormais supprimé réponse dans le cas où vous êtes intéressé 🙂values
à être nul - pas ce qui se passerait si vous l'avez appelé sans arguments.null
. Jusqu'à aujourd'hui, j'ai toujours vérifiéparams
arguments pour voir si elles étaientnull
avant de les utiliser, mais ne l'a jamais confirmé qu'il était effectivement possible de la valeur ànull
. Merci pour la réponse définitive.J'ai décidé d'écrire un peu de code pour tester cela pour moi. En utilisant le programme suivant:
Les résultats suivants sont cédés:
Donc, oui, il est tout à fait possible pour que la matrice associée à params être null.
Ma première estimation était de déclarer le paramètre avec la valeur par défaut est null, ce qui serait logique, dans certains cas, mais le langage c# ne permet pas cela.
Le moyen de contourner cette limitation en faisant explicitement en passant null a déjà été répondu.
En plus de Jon réponse, vous pouvez aussi avoir quelque chose comme ceci: