Udostępnij za pośrednictwem


CA1806: Nie ignoruj wyników metod

TypeName

DoNotIgnoreMethodResults

CheckId

CA1806

Kategoria

Microsoft.Usage

Złamanie zmiany

Bez podziału

Przyczyna

Istnieje kilka możliwych przyczyn to ostrzeżenie:

  • Nowy obiekt zostanie utworzony, ale nigdy nie używane.

  • Wywoływana jest metoda, która tworzy i zwraca nowy ciąg znaków i nigdy nie jest używany nowy ciąg znaków.

  • Metody COM lub P/Invoke, która zwraca kod błędu lub wartość HRESULT nigdy nie jest używany.Opis reguły

Tworzenie niepotrzebnych obiektów i kolekcji garbage skojarzone nieużywane obiektu obniżyć wydajność.

Ciągi znaków są niezmienne i metod, takich jak String.ToUpper zwraca nową instancję ciągu zamiast modyfikować wystąpienie ciągu wywoływania metody.

Kod błędu lub wartość HRESULT ignorowanie może prowadzić nieoczekiwane zachowanie w warunkach błąd lub warunki niskiej zasobów.

Jak naprawić naruszenia

Jeśli metoda a tworzy nowe wystąpienie obiektu B, który nigdy nie jest używany, przekazać wystąpienia jako argument do metody innego lub przypisać zmiennej instancji.Jeśli tworzenie obiektów jest zbędne, usuń it.- lub -

Jeśli metoda wywołuje metodę B, ale nie używać w nowym wystąpieniu ciągu metoda b zwraca.Przekazać wystąpienia jako argument do metody innego, Przypisz instancji zmiennej.Lub usunąć wywołanie, jeśli nie jest konieczne.

- lub -

Jeśli metoda wywołuje metodę B, ale nie używa HRESULT lub kod błędu metoda zwraca.Wynik jest użyty w instrukcji warunkowej, wynik należy przypisać zmiennej lub przekazać go jako argument do innej metody.

Kiedy do pomijania ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły, chyba że akt Tworzenie obiektu służy niektórych celów.

Przykład

Poniższy przykład pokazuje klasę, która ignoruje wynik wywołania String.Trim.

Poniższy przykład rozwiązuje poprzedniego naruszenie przez przypisywanie wynik String.Trim zmienną, która została wywołana w.

W poniższym przykładzie przedstawiono metodę, która nie korzysta z obiektu, który tworzy.

[!UWAGA]

Naruszenie tego nie można odtworzyć w programie 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; }        
        }    
    };
}

Poniższy przykład rozwiązuje poprzedniego naruszenie przez usunięcie niepotrzebnych utworzenia obiektu.

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

W poniższym przykładzie metoda, która ignoruje macierzystym metoda GetShortPathName zwraca kod błędu.

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

Poniższy przykład rozwiązuje poprzedniego naruszenie przez sprawdzanie kodu błędu i zgłaszanie wyjątku, gdy połączenie nie powiedzie się.

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