CA1806: Não ignorar os resultados do método
TypeName |
DoNotIgnoreMethodResults |
CheckId |
CA1806 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
Há vários motivos possíveis para este aviso:
Um novo objeto é criado, mas nunca usado.
Um método que cria e retorna uma nova seqüência de caracteres é chamado e a nova seqüência nunca é usada.
Um método COM ou P/Invoke que retorna um código de erro ou o HRESULT que nunca é usado. Descrição da regra
A coleta de lixo associado do objeto não utilizado e de criação de objetos desnecessários degradar o desempenho.
Seqüências de caracteres são imutáveis e métodos como string. ToUpper retorna uma nova instância de uma seqüência de caracteres em vez de modificar a ocorrência da seqüência de caracteres o método de chamada.
Ignorar o código de erro ou HRESULT pode levar a um comportamento inesperado em condições de erro ou condições de recursos baixos.
Como corrigir violações
Se a de método cria uma nova instância do objeto b que nunca é usada, passe a instância como um argumento para o outro método ou a instância de atribuir a uma variável. Se a criação do objeto é desnecessária, remova o proprietário.- ou -
Se o método a chama o método B, mas não usa a nova instância de seqüência de caracteres que o método b retorna. Passe a instância como um argumento para o outro método, atribua a instância a uma variável. Ou remover a chamada se ele for desnecessário.
- ou -
Se o método a chama o método B, mas não usa o HRESULT ou código de erro que o método retorna. Usar o resultado em uma instrução condicional, o resultado de atribuir a uma variável ou passá-lo como um argumento para o outro método.
Quando suprimir avisos
Não suprimir um aviso da regra, a menos que o ato de criar o objeto serve alguma finalidade.
Exemplo
O exemplo a seguir mostra uma classe que ignora o resultado da chamada String.Trim.
O exemplo a seguir corrige a violação anterior, atribuindo o resultado de String.Trim a variável que foi chamado.
O exemplo a seguir mostra um método que não usa um objeto que ele cria.
Observação |
---|
Essa violação não puder ser reproduzida em 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 a criação desnecessária 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 ignora 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 se o código de erro e lançando uma exceção quando a chamada falhar.
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();
}
};
}