CA1806: Neignorujte výsledky metody
Název_typu |
DoNotIgnoreMethodResults |
CheckId |
CA1806 |
Kategorie |
Microsoft.Usage |
Změnit rozdělení |
Bez rozdělení |
Příčina
Existuje několik možných důvodů pro toto varování:
Nový objekt je vytvořen, ale nikdy použít.
Je volána metoda, která vytvoří a vrátí nový řetězec a nový řetězec nikdy použity.
COM nebo P/vyvolat metodu, která vrátí hodnotu HRESULT nebo chybový kód, který nikdy použity.Popis pravidla
Vytvoření objektu zbytečné a přidružené uvolnění nevyužitých objektu snížit výkon.
Řetězce jsou neměnné a metody, jako je například String.ToUpper vrátí nové instance řetězec namísto instance string volající metodu úpravy.
Ignorování HRESULT nebo chybový kód může vést k neočekávanému chování chybové podmínky nebo podmínky nedostatku prostředků.
Jak opravit porušení
Pokud metoda a vytvoří novou instanci objektu B, který nikdy použity, předat jako argument jinou metodu instance nebo přiřadit instanci proměnné.Vytvoření objektu je zbytečné, odebrat jej.- nebo -
Pokud metoda a volá metodu B, ale nepoužívá nové instance string, který vrací metoda B.Předat jako argument jinou metodu instance, přiřaďte instanci proměnné.Nebo pokud je nutné odebrat volání.
-nebo-
Metoda vrátí metoda a volá metodu B, ale nepoužívá hodnota HRESULT nebo kód chyby.Výsledek použití podmíněného příkazu, výsledek přiřadit proměnné nebo předat jako argument pro jinou metodu.
Při potlačení upozornění
Pokud při vytvoření objektu slouží některé účelu není potlačí upozornění od tohoto pravidla.
Příklad
Následující příklad ukazuje třídu, která ignoruje výsledkem volání String.Trim.
Následující příklad řeší porušení předchozí podle přiřazení proměnné, kterou byla volána v důsledku String.Trim.
Následující příklad ukazuje metodu, která vytvoří objekt nepoužívá.
[!POZNÁMKA]
Toto narušení nelze reprodukovat v jazyce 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; }
}
};
}
Následující příklad řeší porušení předchozí odebráním nepotřebných vytvoření objektu.
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; }
}
};
}
Následující příklad ukazuje způsob, který kód chyby, vrátí metoda nativní funkce GetShortPathName ignoruje.
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();
}
};
}
Následující příklad řeší porušení předchozí kód chyby kontroly a při selhání volání došlo k výjimce.
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();
}
};
}