pourquoi préférons-nous ? pour ?? opérateur en c#?
J'ai récemment trouvé que nous pouvons utiliser ?? opérateur de vérifier les valeurs null. Veuillez vérifier les ci-dessous des exemples de code:
var res = data ?? new data();
C'est exactement similaire à
var res = (data==null) ? new data() : data ;
J'ai vérifié l'ensemble de mon projet de référentiel source et certains d'autres projets open source. Et ce ??
opérateur jamais été utilisé.
Je me demandais est-il une raison derrière tout cela, comme des problèmes de performances ou quelque chose?
EDIT:
Je viens de mettre à jour mon exemple de code sur la base des observations de récursive & Anton. Son, une erreur dans l'insouciance. 🙁
- Une des raisons est ppl pourrait ne pas être au courant!
- doit être "var res = (data!=null) ? données : de nouvelles données();" dans votre échantillon
- tout simplement ridicule et non pas de droit.
Vous devez vous connecter pour publier un commentaire.
Null fusionnent opérateur est beaucoup plus clair lors de la vérification de null, c'est son but principal. Il peut également être enchaînés.
Alors que l'opérateur est limitée à la valeur null de la vérification, l'opérateur ternaire est pas. Par exemple
Je pense que les gens ne sont pas conscients de la valeur null fusionnent opérateur afin qu'ils utiliser l'opérateur ternaire à la place. Ternaire existait avant C# dans la plupart des C style de langues, de sorte si vous ne savez pas C# à l'intérieur et à l'extérieur et/ou que vous avez programmé dans une autre langue, ternaire est un choix naturel. Si vous êtes à la vérification de la valeur null si, utilisez la valeur null fusionnent opérateur, il est conçu pour cela, et IL est légèrement optimisé (comparer ?? pour un if then else).
Voici un exemple de comparaison de l'utilisation de chaque
D'abord, il suffit de regarder au niveau de la syntaxe pour les nuls fusionnent, c'est plus clair. Ternaire est vraiment déroutant. Regardons maintenant le IL
Null Fusionnent Seulement
Ternaire Seulement
Si Alors Sinon Seulement
IL n'est pas un de mes points forts, peut-être que quelqu'un peut éditer ma réponse et d'étendre sur elle. Je vais expliquer ma théorie, mais je préfère ne pas confondre moi et pour les autres. Le nombre de LOC est similaire pour tous les trois, mais pas tous, IL exploitants de prendre la même longueur de temps à s'exécuter.
L' ?? opérateur (aussi connu comme le null-coalescence de l'opérateur) est moins connu que l'opérateur ternaire, comme il a fait ses débuts avec .NET 2.0 et les Types Nullables. Raisons pour ne pas l'utiliser probablement inclure commence pas au courant qu'il existe, ou d'être plus familier avec l'opérateur ternaire.
Cela dit, la vérification de la valeur null n'est pas la seule chose que l'opérateur ternaire est bon pour, donc ce n'est pas un remplacement pour elle en tant que telle, comme une meilleure alternative pour des besoins très particuliers. 🙂
Une raison pour laquelle je peux penser, c'est que cet opérateur a été introduit en .NET 2.0 donc le code pour .NET 1.1 ne peut pas l'avoir.
Je suis d'accord avec vous, on devrait utiliser plus souvent.
ref lien
Basé sur Bob réponse
... c'est l'IL de release ...
Une raison (comme d'autres l'ont déjà touché) est susceptible de provenir d'un manque de prise de conscience. Il pourrait également être (comme dans mon cas), un souhait de maintenir le nombre d'approches pour faire des choses similaires dans une base de code plus bas autant que possible. J'ai donc tendance à utiliser l'opérateur ternaire pour tout compact si-un-état-se-met-faire-ce-autrement-ne-que les situations.
Par exemple, je trouve les deux instructions suivantes assez similaires sur le plan conceptuel:
Je pense que c'est juste une habitude à partir d'autres langues. Autant que je sache, ?? l'opérateur n'est utilisé dans aucune autre langue.
//
plutôt que??
. Un exemple (pris à partir de wikipédia):$possibly_null_value // $value_if_null
J'aurais pensé que l'équivalent de
serait