次の方法で共有


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

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

原因

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

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