0

「null逆参照」に関するいくつかのテストの後、以下のコードは「nullポインターを逆参照し、それによってNullExceptionを発生させる」ことができます。

if((validateControl as WebControl) != null)
    (validateControl as WebControl).CssClass (IsValid) ? "stack" : "overflow";

上記を使用して (validateControl as WebControl).CssClass を null にすることはできますか?

その結果は、Fortify によって作成されたドキュメントに表示されます。

4

3 に答える 3

10

falseではない場合に取得するにWebControlは、trueそれ以外の場合は次のようにします。

bool isWebControl = validateControl is WebControl;

nullではない場合を取得しWebControlWebControlそうでない場合は次のようにします。

WebControl webControl = validateControl as WebControl;

(validateControl as WebControl)null にできますか?

はい、 を使用するたびに、理論as的には結果null になる可能性があります。コード分​​析ツールは、それが null でないことを確認したことを確認せず、次の の使用がasnull である可能性があると想定します。したがって、変数に入れて代わりに使用する必要があります。

WebControl webControl = validateControl as WebControl;
if (webControl != null)
{
    // Here 'webControl' is surely _not_ null.
    webControl.CssClass = Page.IsValid ? "stack" : "overflow";
}

(validateControl as WebControl).CssClassnull にできますか?

取得する値はCssClassnull の場合があります。しかし、はプロパティであるため、 が であるCssClass限り、プロパティは常に存在します。validateControlWebControl

于 2013-04-23T12:33:46.097 に答える
2

コードをより明示的に再フォーマットするのはどうですか。

var webControl = validateControl as WebControl;
if(webControl != null)
{
    var cssClass = IsValid ? "stack" : "overflow";
    webControl.CssClass = cssClass;
}
于 2013-04-23T12:32:12.047 に答える
0

はい、できました。重要な場合は、validateControl が null ではなく、WebControl であることを確認したら、CssClass の null 可能性と、「有効」の意味に応じて空または空白のみをテストします。

于 2013-04-23T12:33:13.140 に答える