次の方法で共有


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

プロパティ
ルール ID CA1871
Title null 許容構造体を 'ArgumentNullException.ThrowIfNull' に渡さないでください
カテゴリ パフォーマンス
修正が中断ありか中断なしか なし
.NET 9 では既定で有効 情報として

原因

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

規則の説明

パフォーマンスを向上させるには、null 許容構造体を渡すよりも、プロパティをHasValueチェックし、手動で例外をスローすることをお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

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