10

VS2010 ベータ版 (以前のバージョンでは FxCop) でコード分析を実行した後、次の警告が表示されます。

外部から見えるメソッド 'Identity.Identity(WindowsIdentity)' で、パラメーター 'windowsIdentity' を使用する前に検証します。

コンストラクターは次のとおりです。

public Identity(WindowsIdentity windowsIdentity)
         : base(windowsIdentity.Token)
{
         init();
}

次のように定義されたクラスの場合:

public class Identity : WindowsIdentity

私の質問は、windowsIdentity パラメーターを検証するにはどうすればよいですか? コンストラクターで検証して例外をスローする必要がありますか、それともこれを呼び出すより良い方法はありますか?

4

5 に答える 5

13

静的メソッドで検証できます。

public Identity(WindowsIdentity windowsIdentity)
         : base(GetToken(windowsIdentity))
{
         init();
}

static Token GetToken(WindowsIdentity ident)
{
    if(ident == null)
        throw new ArgumentNullException("ident");

    return ident.Token;
}

(わざわざ WindowsIdentity.Token の型を探す必要はありませんでしたが、お分かりいただけると思います)

于 2009-12-17T19:18:38.650 に答える
1

FXCop はwindowsIdentity、基本クラスのコンストラクターを呼び出すときにアクセスすることで NullReferenceException が発生する可能性があると考えているため、ここでこのエラーを報告していると思います。

null の検証チェックを追加する 1 つの方法は、null の WindowsIdentity パラメーターをチェックして適切なアクションを実行できる静的プライベート関数をクラスに追加することです。

private static WindowsIdentity ValidateIdentity( WindowsIdentity identity )
{
    if( identity == null )
        throw new ArgumentNullException( "identity" );
    // possibly some other validation checks here...

    return identity;        
}

public Identity(WindowsIdentity windowsIdentity)
    : base( ValidateIdentity( windowsIdentity ).Token )
{
     init();
}

もう 1 つの方法は、次のように、三項演算子を使用してパラメーターを検証することです。

public Identity(WindowsIdentity windowsIdentity)
    : base( windowsIdentity == null ? null : windowsIdentity.Token )
{
     init();
}

しかし、あなたが本当に自問すべきことは、あなたは何をしますか?NullReferenceException単純に例外をスローする場合は、引数が null の場合は既に a を通過するため、コードをそのままにしておいても問題ない場合があります。

于 2009-12-17T19:16:15.443 に答える
1

windowsIdentity として NULL を渡すと、コンストラクターが基本クラスにチェーンするときに null 参照例外がスローされるため、不平を言っています。

それに対処する最善の方法は、設計によって異なります。次のように null をチェックできます。

:base(windowsIdentity == null ? null : windowsIdentity.Token)

または、WindowsIdentity をパラメーターとして受け取る基本クラスのコンストラクターで別のコンストラクターを作成し、そのコンストラクターに検証のその部分を実行させることもできます。基本的に、それに対処する方法はたくさんあります。状況に最も適した方法を使用してください。

于 2009-12-17T19:16:36.070 に答える
0

FX copは、パラメーターをnullにすることはできないと言っているので、本当に必要な場合は、何らかの方法で検証する必要があります。コンストラクターで使用しているので、nullとは異なる値が必要になる可能性があります。そのため、FX copが煩わしさを感じないように、そこで検証する必要があります。

nullのコンストラクターが必要な場合は、パラメーターのない別のコンストラクターが必要です。

使用していない場合、または別のポイントで検証している場合は、アラートをスキップできます。

FXcopの問題を回避するには、ArgumentNullExceptionをスローする必要があります。

于 2009-12-17T19:21:10.773 に答える