Partilhar via


Não inicializar desnecessariamente

TypeName

DoNotInitializeUnnecessarily

CheckId

CA1805

Category (Categoria)

Microsoft.desempenho

Quebrando alterar

Não separável

Causa

Um estático ou Construtor de instância inicializa um campo com o valor padrão.Esta regra ignora os assemblies de C++ gerenciado.

Descrição da regra

O common linguagem tempo de execução inicializa todos os campos com seus valores padrão antes de executar o construtor.Na maioria dos casos, inicializar um campo com o valor padrão em um construtor é redundante, que degrada o desempenho e adiciona os custos de manutenção.Um caso em que não é redundante ocorre quando o construtor chama outro construtor da mesma classe ou um construtor de classe base e esse construtor inicializa o campo para um valor não-padrão.Nesse caso, alterar o valor do campo de volta para o valor padrão pode ser apropriado.

Como corrigir violações

Para corrigir uma violação dessa regra, remova a inicialização do campo do construtor.Observe que o compilador translation from VPE for Csharp que é incluído no .NET Framework 2,0 remove essas inicializações desnecessárias quando o optimize opção é ativada.

Você também pode converter a inicialização do campo para uma declaração sistema autônomo mostrado abaixo:

Debug.Assert(field == 0); 

Isso irá obedecer a regra, tornando desmarcar para programadores que trabalham com o código que o campo já foi inicializado.Isso apresentará um modelo mais familiar para os programadores que são usados para trabalhar em vários idiomas.

Quando suprimir avisos

Suprimir um aviso da regra, se o construtor chama outro construtor na classe base ou mesma que inicializa o campo para um valor não-padrão.Também é seguro para eliminar um aviso da regra ou desabilitar a regra inteiramente, se o desempenho e manutenção de código não prioridades.

Exemplo

O exemplo a seguir mostra um tipo que contém várias violações da regra.

Imports System

Namespace PerformanceLibrary

   Class InitializeUnnecessarily

      Dim b1 As Boolean
      Dim b2 As Boolean
      Dim i As Integer
      Dim d As Double
      Dim s As String

      Sub New()

         b1 = True

         ' The following field assignments are violations of this rule.
         b2 = False
         i = 0
         d = 0
         s = Nothing

      End Sub

      Sub New(s As String)

         Me.New()

         ' Exclude the warning for the following statement.
         b1 = False

         Me.s = s

      End Sub

   End Class

End Namespace
using System;

namespace PerformanceLibrary
{
   class InitializeUnnecessarily
   {
      bool b1;
      bool b2;
      int i;
      double d;
      string s;

      InitializeUnnecessarily()
      {
         b1 = true;

         // The following field assignments are violations of this rule.
         b2 = false;
         i = 0;
         d = 0;
         s = null;
      }

      InitializeUnnecessarily(string s) : this()
      {
         // Exclude the warning for the following statement.
         b1 = false;

         this.s = s;
      }
   }
}

Consulte também

Outros recursos

Tabela de valores padrão (Referência C#)