次の方法で共有


CA1871: 'ArgumentNullException.ThrowIfNull' に null 許容構造体を渡さないでください

財産 価値
ルール ID CA1871
タイトル 'ArgumentNullException.ThrowIfNull' に nullable 構造体を渡さないでください。
カテゴリ パフォーマンス
修正が破壊的か非破壊的か なし
.NET 9 で既定で有効になっている 情報提供

原因

int?Guid? などの null 許容構造体が ArgumentNullException.ThrowIfNull に渡されると、オブジェクトにボックス化され、パフォーマンスが低下します。

ルールの説明

性能を向上させるには、HasValue プロパティを確認し、手動で例外をスローする方が、null 許容構造体を ArgumentNullException.ThrowIfNullに渡すより良いです。

違反を修正する方法

null をチェックし、ArgumentNullException を手動でスローします。

次のコード スニペットは、CA1871 の違反を示しています。

static void Print(int? value)
{
    ArgumentNullException.ThrowIfNull(value);
    Console.WriteLine(value.Value);
}

次のコード スニペットは、違反を修正します。

static void Print(int? value)
{
    if (!value.HasValue)
    {
        throw new ArgumentNullException(nameof(value));
    }

    Console.WriteLine(value.Value);
}

警告を抑制するタイミング

パフォーマンスが問題でない場合は、この警告を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、プリプロセッサ ディレクティブをソース ファイルに追加して無効にしてから、ルールを再度有効にします。

#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871

ファイル、フォルダー、またはプロジェクトのルールを無効にするには、その重大度を 構成ファイルnone に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。