Alors, je fais beaucoup de travail de base de données dans une demande - et il existe plusieurs valeurs de retour possibles de mon système de mise en cache. Il peut renvoyer NULL, il peut renvoyer une valeur par défaut (type) ou peut renvoyer un objet non valide (par objet non valide, je signifie une avec des propriétés / valeurs incorrectes). Je veux créer une méthode d'extension pour faire de ces chèques pour moi, comme: Le problème est que mon compilateur me dit que Pourquoi est-ce? p> p> si (obj == par défaut (t )) code> sera toujours faux. P>
3 Réponses :
Puisque vous avez une contrainte de "catégorie" ( où T: classe code>),
par défaut (t) code> est toujours fort> égal à null. Vous avez déjà un chèque pour cela dans l'instruction originale si, le second cas (
obj == par défaut (t) code>) ne pourrait jamais être vrai. P>
La première décision que vous devez faire est: peut t em> être un type de valeur comme int em>? et p> si t em> est toujours un type de référence que vous pouvez supprimer < / p>
Si oui, vous pouvez supprimer
Je ne sais pas si vous le contraindrez en classe parce que vous voulez ou parce que vous sentez que vous devez avoir à. Si c'est ce dernier, voici un moyen de faire la vérification de la valeur par défaut sur des types complexes et simples: si votre choix de le contraindre à la classe n'était que intentionnel ou pour une analyse de rentabilisation, n'hésitez pas ignorer cette suggestion. Une autre chose que cela peut ne pas tenir compte est la boxe de types simples (bien que j'utilise habituellement des types simples nullables ces jours-ci, ce que ce code fonctionne pour). P> P>
Est-ce que cela vous donne une erreur de compilateur ou un avertissement. Je n'obtiens ni. Il compile bien.
@GregB. C'est probablement
resharper code> qui lui donne un indice ...
@GregB Oui, j'ai Resharper.
@caesay - Je ne comprends pas le problème. La valeur par défaut pour une référence à une classe est NULL. La valeur par défaut d'une référence à un objet va également être null. On dirait que vous ne comprenez pas le synax de votre propre code.
@Ramhound: Je vais admettre que c'était un malentendu total de ma part.