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;
}
}
}