Partilhar via


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