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
詳細については、「コード分析の警告を抑制する方法」を参照してください。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET