2009-02-16 4 views
2

Visual Studio semble se plaindre lorsque je passe une chaîne dans un paramètre d'exception.Impossible d'écrire une chaîne dans le constructeur d'exceptions

if (str1 == null || str2 == null) 
{ 
    throw new ArgumentNullException("lmkl"); 
} 

Visual Studio indique qu'il ne peut pas résoudre le symbole "lmkl".

Si j'ai une variable de chaîne (par exemple au-dessus de throw new... string s = "test";) et l'incluez comme paramètre pour l'exception, Visual Studio est plus que satisfait de cela.

Ce qui donne?

Merci

+0

Utilisez-vous le ArgNullEx de la BCL ou la mise en œuvre de votre propre? – StingyJack

+0

ArgNullEx de la BCL. – dotnetdev

Répondre

7

La documentation du constructeur surchargé pour ArgumentNullException qui prend un seul paramètre de chaîne indique que cet argument doit être:

The name of the parameter that caused the exception.

Actuellement, si votre code lance une exception que vous avez gagné » Je ne sais pas quel argument était nul.

réécriture à Recommande

if (str1 == null) throw new ArgumentNullException("str1"); 
if (str2 == null) throw new ArgumentNullException("str2"); 
+0

Merci pour le conseil. Je vais essayer! Merci encore – dotnetdev

7

En fait, Visual Studio ne se soucie pas de cette du tout. Je suppose que vous avez ReSharper installé? Cela valide beaucoup d'erreurs courantes, y compris l'utilisation incorrecte de modèles tels que ArgumentException etc. Il a également mieux null vérification - pas tout à fait "contrats", mais toujours très utile.

Il tente seulement ceci quand il peut voir un littéral de chaîne utilisé dans un modèle connu - l'analyse pour chasser comment vous assignez des variables est simplement trop pour l'analyse réaliste.

+0

Oui, j'utilise resharper. Je n'ai pas vu ça faire ses trucs avec des exceptions dans mon code, sauf que ça a été un bon outil pour travailler avec. Merci. – dotnetdev

0

Si vous utilisez ReSharper, cela devrait supprimer l'avertissement (en supposant str1 est le nom de votre param):

throw new ArgumentNullException(nameof(str1)); 
Questions connexes