7
votes

FirstOrdefault () incapable de coupler avec ?? opérateur

Autant que je puisse comprendre, la méthode LINQ FIREDORDEFAULT () retourne null si un jeu d'enregistrement est vide. Pourquoi ne peut pas utiliser l'opérateur contre la fonction? Comme: xxx


Mise à jour

Je ne veux pas vérifier si d est null plus loin dans mon code. Et faire: xxx

... ou: xxx

... semble un peu excentrée - je voudrais Aime faire ce null-check dans une ligne de code.


1 commentaires

Pendant que vous testez, vous pouvez remplacer nouveau double [] {}. FirstArdefault (); avec par défaut (double) .


5 Réponses :


11
votes

Parce que l'opérateur null-coalescent ( ?? ) s'applique uniquement aux types de référence nullables, tandis que Double est un type de valeur. Vous pouvez utiliser un double brossable à la place ( double? ).


1 commentaires

@FeSnabel, absolument, comme 0.0 est la valeur par défaut d'un double de toute façon.



1
votes

Le fait de le faire nullable devrait fonctionner. Mais, alors vous en faites nullable , tout dépend de votre scénario ... xxx


0 commentaires

11
votes

En réalité, firstordefault () retourne t, qui est une valeur ou par défaut (t) . .

par défaut (t) est soit null ou (t) 0 pour les types de valeur (comme double )


0 commentaires

6
votes

La méthode est appelée FirstOrdefault Not FiestorNull, c'est-à-dire. Il retournera 0, la valeur par défaut d'un double de toute façon, donc il n'y a pas de besoin pour le ??.


1 commentaires

Aurait accepté votre réponse. Mais James Curran a fourni un plus élaboré. Merci Ben.



0
votes

Bien que d'autres ont répondu à la raison pour laquelle vous avez des problèmes de compilation ici, vous avez raison de dire que cela est problématique pour les types de valeur. À ma connaissance, il n'ya aucun moyen de savoir dans ce cas si un résultat de zéro était que le premier élément était vraiment zéro ou parce que le ienumerable code> était vide.

dans l'exemple Vous avez donné, la valeur de secours est zéro quand même, vous avez donc tout ce dont vous avez besoin est la suivante: p> xxx pré>

supposant que vous aviez une valeur de repli sans zéro, vous avez quelques options: p> xxx pré>

ou p> xxx pré>

si vous avez Zen Linq Extensions , vous pouvez faire: P>

var r = myDoubles.FirstOrFallback(fallback);


0 commentaires