CA1806: não ignore resultados do método
TypeName |
DoNotIgnoreMethodResults |
CheckId |
CA1806 |
Categoria |
Microsoft.Usage |
Alteração Significativa |
Sem Quebra |
Causa
Há várias razões possíveis para esse aviso:
Um novo objeto é criado mas nunca usado.
Um método que cria e retorna uma nova cadeia de caracteres é chamado e a nova cadeia de caracteres nunca seja usada.
Um método de COM ou de P/Invoke que retorna um HRESULT ou um código de erro que nunca sejam usados.Descrição da Regra
A criação desnecessária do objeto e a coleta de lixo de objeto associado não usado degradam o desempenho.
As cadeias de caracteres são imutáveis e métodos como retornos de String.ToUpper uma nova instância de uma cadeia de caracteres em vez de modificar a instância de cadeia de caracteres no método de chamada.
Ignorar HRESULT ou código de erro pode resultar em um comportamento inesperado em condições de erro ou às condições de baixo recurso.
Como Corrigir Violações
Se o método Para criar uma nova instância do objeto de B que nunca será usado, passe a instância como um argumento para outro método ou atribuir a instância a uma variável.Se a criação do objeto é desnecessária, - ou removê-lo.
Se o método A seguir chama o método B, mas não usa a nova instância da cadeia de caracteres que o método B retorna.Passar a instância como um argumento para outro método, atribua a instância a uma variável.Ou remover a chamada se for desnecessário.
- ou -
Se o método A seguir chama o método B, mas não usa o HRESULT ou o código de erro que o método retorna.Use o resultado em uma instrução condicional, atribuir o resultado a uma variável, ou passá-lo como um argumento para outro método.
Quando Suprimir Alertas
Não suprima um aviso desta regra a menos que o ato da criação do objeto para servir qualquer propósito.
Exemplo
O exemplo a seguir mostra uma classe que ignore o resultado de chamar String.Trim.
O exemplo a seguir corrige a violação anterior ao atribuir o resultado de String.Trim de volta para a variável que foi chamado.
O exemplo a seguir mostra um método que não use um objeto que cria.
Observação |
---|
Essa violação não pode ser reproduzida no Visual Basic. |
Imports System
Namespace Samples
Public Class Book
Private ReadOnly _Title As String
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
_Title = title
End Sub
Public ReadOnly Property Title() As String
Get
Return _Title
End Get
End Property
End Class
End Namespace
using System;
namespace Samples
{
public class Book
{
private readonly string _Title;
public Book(string title)
{
if (title != null)
{
// Violates this rule
title.Trim();
}
_Title = title;
}
public string Title
{
get { return _Title; }
}
}
}
using namespace System;
namespace Samples
{
public ref class Book
{
private:
initonly String^ _Title;
public:
Book(String^ title)
{
if (title != nullptr)
{
// Violates this rule
title->Trim();
}
_Title = title;
}
property String^ Title
{
String^ get() { return _Title; }
}
};
}
O exemplo a seguir corrige a violação anterior removendo desnecessária a criação de um objeto.
Imports System
Namespace Samples
Public Class Book
Private ReadOnly _Title As String
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
_Title = title
End Sub
Public ReadOnly Property Title() As String
Get
Return _Title
End Get
End Property
End Class
End Namespace
using System;
namespace Samples
{
public class Book
{
private readonly string _Title;
public Book(string title)
{
if (title != null)
{
title = title.Trim();
}
_Title = title;
}
public string Title
{
get { return _Title; }
}
}
}
using namespace System;
namespace Samples
{
public ref class Book
{
private:
initonly String^ _Title;
public:
Book(String^ title)
{
if (title != nullptr)
{
title = title->Trim();
}
_Title = title;
}
property String^ Title
{
String^ get() { return _Title; }
}
};
}
O exemplo a seguir mostra um método que ignore o código de erro que o método nativo GetShortPathName retorna.
using System;
namespace Samples
{
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
// Violates this rule
new Book();
return new Book();
}
}
}
using namespace System;
namespace Samples
{
public ref class Book
{
public:
Book()
{
}
static Book^ CreateBook()
{
// Violates this rule
gcnew Book();
return gcnew Book();
}
};
}
O exemplo a seguir corrige a violação anterior verificando o código de erro e gerando uma exceção quando houver falha na chamada.
using System;
namespace Samples
{
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
return new Book();
}
}
}
using namespace System;
namespace Samples
{
public ref class Book
{
public:
Book()
{
}
static Book^ CreateBook()
{
return gcnew Book();
}
};
}