Est en train de passer la valeur null dans une méthode acceptable
Null est une drôle de type de données pour moi, il me semble que c'est à tort utilise jamais, peut-être que son pointeur null erreurs, je me suis tellement souvent que des débutants qui ont maintenant m'associer une instance de la valeur null à une sorte de mal!
De toute façon, ma question est
dans certains cas, est-il possible d'utiliser la valeur null comme paramètre? par exemple, une méthode peut avoir besoin de a et b pour faire une tâche, mais dans certains cas, il peut seulement besoin d'un. Analyse de la valeur null ok pour b dans ces impair instances et de vérification if(b==null) alors nous savons ce qu'il a appelé de?
Ou suis-je en manière de la marque ici?
je dois l'avouer, ce qui m'a demandé si c'était acceptable a été, la méthode en question pourrait être overlaoded, mais il aurait une différence de peut-être 5 ou 6 lignes de l'ensemble de la méthode. Cela m'a fait inquiet au sujet de la duplication de code.
- Juste par curiosité: est - il possible de voir ce que la méthode qui accepte la valeur null est en train de faire? Je sais que la réponse est déjà accepté, mais c'est un très intéressant et important débat à mon avis. 🙂
Vous devez vous connecter pour publier un commentaire.
Il est absolument parfait pour passer
null
de méthodes. Toutefois, si vous avez un scda où vous ne pourriez pas besoin de passer une variable, envisager la surcharge.La raison pour laquelle vous pouvez passer une valeur null est parce que vous pouvez avoir une méthode avec assez peu de paramètres et vous ne wan à mettre en œuvre tous les possibles surcharges.
Personnellement, je pas utilisation paramètres facultatifs - il y a beaucoup de discussions sur ce sujet en raison de la question avec le méthode de Contrat qui est en dehors de la portée de cette question.
Mise à JOUR
Bonne façon de le faire est de ne pas dupliquer le code, mais laissez les surcharges de s'appeler les uns les autres:
Cela indiquera au client de ce code:
Si j'ai seulement la deuxième méthode, le client ne serait pas savoir si c'est OK pour passer
null
.Je dirais que c'est pas ok. En passant null autour n'est jamais une bonne pratique, et à mon avis, chaque fois qu'une valeur est null il devrait être une exception. Vous pourriez ne pas toujours avoir le contrôle sur la façon dont vos données sont communiquées, et dans ces cas, vous devez vérifier la valeur null, juste au cas où cela pourrait se produire. Toutefois, si vous avez la possibilité de contrôler les arguments de vous-même, vous devriez plutôt surcharge de la méthode, au lieu de passer la valeur null.
Envisagez le scénario suivant:
Dans cet exemple, nous sommes en indiquant que a et b sont des chaînes de caractères. Ils sont des objets de type char[] ou si vous souhaitez définir une chaîne de caractères.
En passant d'une valeur null dans cette méthode n'a aucun sens, puisque nous nous attendons à cordes. Une valeur null est rien - ce n'est pas une chaîne vide - c'est tout simplement nulle.
La raison pour laquelle je dis que je ne pense pas qu'il est préférable de nous envoyer dans
null
dans une méthode est parce qu'il y a jamais utilise pournull
. C'est tout simplement un vide laissé là comme un espace réservé pour quelque chose qui n'a pas instansiate. Par conséquent, l'appel de la méthode ci-dessus comme ceci:DoSomething("quel que soit", null) n'a aucun sens.
On pourrait avancer que nous pouvions faire quelque chose comme ceci:
Mais qui rend le code moins lisible. Pourquoi ne pas faire une surcharge DoSomething(chaîne a) ? Ou peut-être refactoriser la méthode complètement car il peut faire quelque chose avec
a
etnull
et toujours retourner une valeur valide.null
n'est pas une valeur valide, donc le résultat d'une opération, y comprisnull
comme un argument ne doit pas renvoyer une valeur valide.C'est comme l'utilisation de l'infini en mathématiques. Vous obtiendrez toujours de l'infini comme un résultat si vous ajouter/soustraire/multiplier ou de diviser quelque chose avec elle.
Avertissement
Ce sont mes propres opinions, et en aucun cas la "bonne" façon de la programmation. Mais puisque la question n'a pas de droit de réponse, je vais pratiquer mon droit à la liberté d'expression 🙂
Si vous n'utilisez pas certains paramètres que vous pouvez utiliser La surcharge ou Les Paramètres Facultatifs en C# 4.0
Vous dites "est-il ok pour passer à une valeur null comme paramètre à une méthode?"
Si oui - oui - il est parfaitement acceptable.
Toutefois, dans le .Net 4.0 monde, vous pouvez envisager d'utiliser des paramètres optionnels, de sorte que vous n'avez même pas besoin de passer la valeur null, vous pouvez simplement l'omettre.
Dans le pré .Net 4.0 monde, si c'est un scénario commun pour passer cette valeur null dans une méthode, vous pouvez créer une surcharge qui ne prend pas l'argument.
Qui est parfaitement acceptable. Si vous êtes à l'aide de C# 4.0, vous pouvez également faire le paramètre en option de sorte que l'appelant n'a pas besoin de spécifier la valeur par défaut.