9
votes

Existe-t-il un moyen de marquer une méthode comme garantie que t n'est pas nul?

Par exemple, si j'ai une méthode définie comme ... xxx pré>

... et j'appelle cette méthode d'ailleurs ... p>

void SomewhereElse()
{
    T t = Create();
    // >><<
}


1 commentaires

Moi aussi, je souffre de la maladie de Oh-My-My-God-Resthower-I-I-At-Dis-It Maladie. Donc, vous n'êtes pas seul.


4 Réponses :


1
votes

Vous ne savez pas comment R # gère cela, mais le Contract.Assert La méthode peut être ce que vous recherchez


0 commentaires

0
votes

Pourriez-vous lancer T sur un objet, puis vérifiez si son NULL?

var o = (object)Factory.Create<T>();
if(o == null) throw new Exception();


0 commentaires

1
votes

Vous pouvez mettre une contrainte sur t pour autoriser uniquement struct .

Vous pouvez utiliser une extension de langue qui vous permet de créer des définitions plus fortes des conditions pré / post pour votre fonction (programmation basée sur contrat), comme SpecSharp ou code Contrats . Les contrats de code semblent exploiter des systèmes intégrés de C # 4.0. Je n'ai aucune expérience avec l'une ou l'autre - seulement entendu parler d'eux.


4 commentaires

Le problème étant qu'il doit être quelque chose de Resharper reconnaît.


@Shibumi: Si vous utilisez l'une des méthodes, j'ai suggéré de résoudre le problème (qui donnerait sa propre vérification indépendante et pourrait garantir cela à l'heure de la compilation, soulager votre code de vérification de l'exécution), vous devez définitivement ajouter des configurations / pragmas à configurer. Resharper pour les ignorer. Cela ressemble aux bons docs: jetbrains.com/resharper/webhelp/... . Vous devez toujours examiner et personnaliser vos avertissements à partir de tout outil d'analyse statique.


@Shibumi: Mais vous êtes libre de choisir la solution Meilleur pour vous :) Il est souvent préférable d'utiliser pleinement les outils que vous avez déjà que de jeter plus de technologies au problème. La réponse de Mike Deux ans ressemble à une bonne.


Je suis d'accord avec votre sentiment que cela ressemble à ceci (au moins la vérification de la vérification de __ ') devrait être normalisé et que l'utilisation d'outils courants est un bon moyen d'y aller. +1 pour ça. Merci! (La question avec les désactivation avec #pragma, c'est qu'il vaudra obvusquer des endroits où j'avais besoin de le voir. L'utilisation de commentaires peut sembler désordonné.)



5
votes

Si Restomer est la raison pour laquelle vous vous souciez, vous pouvez marquer le usine.create () méthode avec leur [nonull] attribut décrit dans leur Aide Web


3 commentaires

J'ai eu peur de leur aide Web, je pense. Ceci est exactement ce que je cherchais. Maintenant, je dois juste faire face au fait que je ne fais jamais référence à des assemblées de Restomes dans notre application :). Merci!


@Shibumi - Ils montrent en fait comment se déplacer autour de leurs assemblées en coupant et en collant les définitions dans votre code. C'est dans le même lien.


Je venais de revenir à l'amendement que. Je vois qu'ils peuvent détecter la présence de l'espace de noms et des attributs de votre propre code. Je pense que j'aurais toujours une vente difficile sur cela, bien que: "J'aimerais ajouter ces attributs étrangers dans notre codeBase afin que mon TOC pour supprimer des lignes squigly soit satisfait." Merci quand même pour vôtre aide; Vous avez zulé sur exactement la réponse que je cherchais!