8
votes

Comment faire une méthode générique permet de renvoyer NULL et d'accepter Enum?

Comment faire fonctionner l'extension suivante? Je lie la combinaison de la combinaison à une énorme et, dans ce cas, il ne compile pas car il renvoie null . xxx

Remarque: je le veux revenir null ( au lieu de défaut (t)). La question est que la question est que quelle est l'expression que je dois utiliser?


1 commentaires

Après avoir répondu à votre question concernant le retour NULL à partir de la méthode générique: Stackoverflow.com/Questtions/302096/...


3 Réponses :


5
votes

C'est impossible. Les types de valeur ne peuvent pas être nuls. Votre méthode d'extension renvoie une instance de t et si ce t est une énumération (type de valeur), sa valeur ne peut pas être nulle. Donc, sans changer votre type de retour, une telle signature de méthode ne peut tout simplement pas exister. En tant que contraignant le paramètre générique pour être un énumé, c'est aussi impossible en C # mais possible dans MSIL. Jon a blogué à ce sujet .


4 commentaires

Et s'il est retourné par défaut plutôt que null?


@Tim, bien sûr, qui fonctionnera et la bonne façon d'écrire cette méthode d'extension, mais le OP le sait déjà parce qu'il l'a mentionné dans sa question. J'ai juste essayé de lui expliquer que la signature de la méthode générique qu'il tente d'écrire ne peut tout simplement pas exister.


@Darin: Merci pour la réponse, dans mon cas, la suggestion qui a été répondue par Konrad utile.


@Darin, je viens de relire la question de l'OP et j'ai vu qu'il ne voulait pas utiliser par défaut . Quoi qu'il en soit, j'apprécie la réponse que j'aime comprendre le "comment" des choses, pas seulement si cela peut ou ne peut pas être fait.



9
votes

Renvoie une nullable au lieu d'une plaine t : xxx


0 commentaires

1
votes

L'approche la plus courante dans ce cas fait partie de tous les autres membres de votre énumération Définir Aucun , dans ce cas dans votre logique Aucun == null .


2 commentaires

Yup, c'est utile, je pense que c'est correct juste en attribuant 0 à Aucun Valeur et que la poste renvoie par défaut (t)


@French Boy: C'est simple et lisible, donc la plus naturelle de résoudre ce genre de problèmes.