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 comme 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.
[!REMARQUE]
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();
}
};
}