ReSharper: comment supprimer "Possible" System.NullReferenceException '"avertissement
Voici un morceau de code:
IUser user = managerUser.GetUserById(UserId);
if ( user==null )
throw new Exception(...);
Quote quote = new Quote(user.FullName, user.Email);
Tout va bien ici. Mais si je remplace le "si" de la ligne avec le suivant:
ComponentException<MyUserManagerException>.FailIfTrue(user == null, "Can't find user with Id=" + UserId);
où la fonction de la mise en œuvre est la suivante:
public abstract class ComponentException<T> : ComponentException
where T : ComponentException, new()
{
public static void FailIfTrue(bool expression, string message)
{
if (expression)
{
T t = new T();
t.SetErrorMessage(message);
throw t;
}
}
...
}
Puis resharper me génère un avertissement: il est Possible de 'Système.NullReferenceException' pointant sur la 1ère utilisation de 'utilisateur' objet.
T1. Pourquoi il génère une telle exception? Aussi loin que je vois si "utilisateur==null', puis exception est générée et l'exécution ne sera jamais atteindre le point d'utilisation.
T2. Comment faire pour supprimer cet avertissement? Veuillez noter:
1. Je ne veux pas supprimer cette alerte, avec des commentaires (je vais avoir beaucoup de pièces semblables et ne veux pas transformer mon code source en " a commenté garbase);
2. Je ne veux pas les changements de resharper paramètres pour modifier ce problème de l'alerte à la "suggestion" de "conseil".
Grâce.
Toutes les pensées sont les bienvenus!
P. S. je suis à l'aide de resharper 5.1, MVSV 2008, C#
source d'informationauteur Budda
Vous devez vous connecter pour publier un commentaire.
Q1: Parce que Resharper ne fait pas dans le chemin de l'analyse. Il voit juste un possible
null
de référence et les indicateurs.Q2: Vous ne pouvez pas sans faire soit de ce que vous avez déjà fournis.
Resharper ne regarde que la méthode actuelle de son analyse, et de ne pas effectuer une analyse récursive d'autres méthodes que vous appelez.
Vous pouvez cependant directe Resharper un peu et lui donner des méta-informations sur certaines méthodes. Il sait par exemple au sujet de "faire Valoir.IsNotNull(a)", et de tenir compte de ces informations pour l'analyse. Il est possible de faire un externe annotations fichier pour Resharper et de lui donner des informations supplémentaires au sujet d'une certaine bibliothèque pour faire son analyse mieux. Peut-être que cela pourrait être un moyen de résoudre votre problème.
Plus d'informations peuvent être trouvées ici.
Un exemple montrant comment il est utilisé pour la bibliothèque Microsoft.Les contrats peuvent être trouvés ici.
Une nouvelle réponse dans l'ancien poste...
Voici un petit exemple de mon code sur la façon d'utiliser CodeContract via ContractAnnotation avec Resharper:
C'est très simple...si u trouver le fil d'ariane dans le bois. Vous pouvez consulter d'autres cas aussi.
Ont un beau jour
Vous ne savez (ou espérer) que ce code va lever une exception si il y a une référence null:
Cependant, puisqu'il n'y a pas de contrat précisant ce, ReSharper est à présumer que c'est un appel de méthode qui peut retourner sans jeter de l'exception dans tous les cas.
Rendre cette méthode de mettre en œuvre la ReSharper contrat, ou comme une solution de contournement simple (qui n'affecte que le mode debug, donc pas de perte de performance pour la libération de la mode), juste après la
FailIfTrue
appel:Qui va se débarrasser de l'avertissement, et comme un bonus supplémentaire de faire un moment de l'exécution en mode debug pour s'assurer que la condition assumée par vous après l'appel de
FailIfTrue
est en effet rencontré.Cela est causé par la Resharper moteur. Ces "possibles NullReferenceException" arriver parce que quelqu'un (probablement à Resharper) a déclaré que/configuré quelque part une annotation sur la méthode.
Voici comment cela fonctionne: ReSharper NullReferenceException de l'Analyse et de Ses Contrats
Malheureusement, parfois, ces durées d'annotation sont tout simplement faux.
Lorsque vous détectez une erreur, vous devez le signaler à JetBrains et ils mettront à jour les annotations sur la prochaine version. Ils sont utilisés pour cela.
En attendant, vous pouvez essayer de réparer vous-même. Lire l'article pour plus 🙂