CA1806 : Ne pas ignorer les résultats de méthode

TypeName

DoNotIgnoreMethodResults

CheckId

CA1806

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Cet avertissement peut s'afficher pour plusieurs raisons :

  • Un nouvel objet est créé mais n'est jamais utilisé.

  • Une méthode qui crée et retourne une nouvelle chaîne est appelée et la nouvelle chaîne n'est jamais utilisée.

  • Une méthode COM ou P/Invoke qui retourne un HRESULT ou un code d'erreur qui n'est jamais utilisé. Description de la règle

La création d'un objet inutile et le garbage collection associé de l'objet inutilisé diminuent les performances.

Les chaînes sont immuables et les méthodes telles que String.ToUpper retournent une nouvelle instance d'une chaîne au lieu de modifier l'instance de la chaîne dans la méthode d'appel.

Ignorer un HRESULT ou un code d'erreur peut entraîner un comportement inattendu dans les conditions d'erreur ou des situations de ressources limitées.

Comment corriger les violations

Si la méthode A crée une instance de l'objet B qui n'est jamais utilisée, passez l'instance en tant qu'argument à une autre méthode ou assignez-la à une variable. Si la création d'objet n'est pas nécessaire, supprimez-la. – ou –

Si la méthode A appelle la méthode B, mais n'utilise pas la nouvelle instance de chaîne retournée par la méthode B. Passez l'instance en tant qu'argument à une autre méthode, assignez l'instance à une variable. Ou supprimez l'appel s'il n'est pas nécessaire.

ou

Si la méthode A appelle la méthode B, mais n'utilise pas le HRESULT ou le code d'erreur retourné par la méthode. Utilisez le résultat dans une instruction conditionnelle, assignez le résultat à une variable ou passez-le en tant qu'argument à une autre méthode.

Quand supprimer les avertissements

Ne supprimez pas d'avertissement de cette règle à moins que l'acte de la création de l'objet serve à un but quelconque.

Exemple

L'exemple suivant illustre une classe qui ignore le résultat de l'appel de String.Trim.

L'exemple suivant résout la violation précédente en réassignant le résultat de String.Trim à la variable qui l'a appelé.

L'exemple suivant présente une méthode qui n'utilise pas un objet qu'elle crée.

Notes

Cette violation ne peut pas être reproduite en 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; }        
        }    
    };
}

L'exemple suivant résout la violation précédente en supprimant la création inutile d'un objet.

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

L'exemple suivant affiche une méthode qui ignore le code d'erreur retourné par la méthode GetShortPathName native.

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

L'exemple suivant résout la violation précédente en vérifiant le code d'erreur et en levant une exception en cas d'échec de l'appel.

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