CA1805:不必要に初期化しない

プロパティ
ルール ID CA1805
Title 不必要に初期化しない
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

クラスのフィールドは、そのフィールドの型の既定値に明示的に初期化されます。

規則の説明

.NET ランタイムでは、コンストラクターを実行する前に参照型のすべてのフィールドを既定値に初期化します。 ほとんどの場合、コンストラクターでフィールドを既定値に明示的に初期化するのは冗長で、メンテナンス コストが増加し、パフォーマンスが低下する可能性があります (アセンブリ サイズの増加など)。また、明示的な初期化を削除することもできます。

違反の修正方法

ほとんどの場合、適切な解決策は、不要な初期化を削除することです。

class C
{
    // Violation
    int _value1 = 0;

    // Fixed
    int _value1;
}

場合によっては、初期化を削除するとフィールドの既定値が永久に保持されるため、後続の CS0649 警告が発行されることがあります。 このような場合は、フィールドを完全に削除するか、プロパティに置き換えることをお勧めします。

class C
{
    // Violation
    private static readonly int s_value = 0;

    // Fixed
    private static int Value => 0;
}

どのようなときに警告を抑制するか

警告は、回避できる不要なコードや作業を強調表示するだけなので、警告を抑制するのは常に安全です。

警告を抑制する

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

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

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

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

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

関連項目