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