警告「可能な 『System.NullReferenceException』」を削除する方法のコードの一部です:ReSharperのは:ここでは
IUser user = managerUser.GetUserById(UserId);
if (user==null)
throw new Exception(...);
Quote quote = new Quote(user.FullName, user.Email);
すべてがここに罰金です。しかし、次のいずれかでライン「場合、」私は交換した場合:
ComponentException<MyUserManagerException>.FailIfTrue(user == null, "Can't find user with Id=" + UserId);
機能の実装は以下の通りです
:可能な「System.NullReferenceException」第一の使用に向いて:
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;
}
}
...
}
をその後のReSharperは私に警告を生成し、 'user'オブジェクトの
Q1。なぜそれはそのような例外を生成するのですか?私が見る限り、 'user == null'の場合、例外が生成され、実行は使用ポイントに到達しません。
Q2。その警告を削除するには?注記: 1.私はこの警告をコメントで抑制したくありません(私は似たようなものがたくさんあり、コメント付きのgarbaseでソースコードを変換したくありません)。 2. Resharperの設定を変更して、この問題を警告から「ヒント」の「提案」に変更したくありません。
ありがとうございました。
どのような考えも歓迎です!
P.S.私はresharper 5.1、MVSV 2008、C#
を持っている... ReSharperの5.1が正しく 'Debug.Assertの(!ユーザー= null)を識別するために失敗した;'と警告を発生させます。私がしなければならない設定はありますか? –
R#5.1はかなり古くなっているので、私はあなたの問題をテストすることは何もしていません。しかし、いくつかのヒント:コードコントラクトがそのために定義されているように、あなたのコードが 'System.Diagnostics.Debug'クラスを適切に参照し、その名前/シグネチャを持つ任意のメソッドではないことを確認してください。また、ビルド構成がDebugに設定されていることを確認してください(そうしないと、コードが有効範囲外になり、警告がポップアップします)。 – Lucero
'Debug.Assert'は動作しますが、デバッグモードでのみ動作します。 –