意図しない参照比較の可能性がある 質問する

意図しない参照比較の可能性がある 質問する

警告を出す次のコードがあります

意図しない参照比較の可能性があります。値の比較を行うには、左側を 'string' 型にキャストします。

if (lblStatus.Content == "ACTIVE")
{
  //Do stuff
}
else
{
  //Do other Stuff
}

lblStatus.Contentこの警告は、必ずしも常に文字列型であるとは限らないためだと思います。

以下の各手順で修正を試みましたが、まだ警告が表示されます

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")

なぜまだ警告が表示されるのか、またこれに対処する最も実用的な方法を誰か説明してもらえませんか?

ベストアンサー1

この警告は、コンパイル時の型はlblStatus.Contentですobject。したがって、演算子オーバーロードは、==(object, object)参照の同一性の比較に過ぎないオーバーロードを選択します。これは、実行時間値のタイプです。

選択肢の1つ目または2つ目すべきただし、警告は修正されました:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")

最初の形式は null の場合に例外をスローすることに注意してくださいlblStatus.Content。私は 2 番目の形式を好みます。

その時点でまだ警告が表示される場合は、再構築していないか、ビルドにまだ「汚れた」部分があると思われます。完全な再構築絶対に警告を削除する必要があります。

おすすめ記事