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çãoObservaçã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();        
        }            
    };
}