CA1806: не игнорируйте результаты метода
TypeName |
DoNotIgnoreMethodResults |
CheckId |
CA1806 |
Категория |
Microsoft.Usage |
Критическое изменение |
Не критическое |
Причина
Это предупреждение может возникать по нескольким причинам.
Создается новый объект, который нигде не используется.
Вызывается метод, который создает и возвращает новую строку, однако эта строка нигде не используется.
Метод COM или P/Invoke возвращает значение HRESULT или код ошибки, который никогда не используется.Описание правила
Ненужное создание объекта и связанная с ним сборка мусора для неиспользуемого объекта понижает производительность.
Строки невозможно изменить, и такие методы как String.ToUpper возвращают новый экземпляр строки, а не изменяют экземпляр строки в вызывающем методе.
Игнорирование HRESULT или кода ошибки может привести к непредвиденному поведению в состоянии ошибки или к нехватке ресурсов.
Устранение нарушений
Если метод А создает новый экземпляр объекта В, который никогда не используется, передайте этот экземпляр в качестве аргумента другому методу или присвойте экземпляр переменной.Если не требуется создавать объект, удалите его; или
Если метод A вызывает метод B, но не использует новый экземпляр строки, возвращаемый методом B.Передайте этот экземпляр другому методу в качестве аргумента, присвойте экземпляр переменной.Или удалите вызов, если он не нужен.
-или-
Если метод A вызывает метод B, но не использует значение HRESULT или код ошибки, возвращаемый методом B.Используйте результат в условном операторе, присвойте результат переменной или передайте его в качестве аргумента другому методу.
Отключение предупреждений
Предупреждения о нарушении данного правила можно отключить только в том случае, если создание объекта необходимо для какой-либо цели.
Пример
В следующем примере показан класс, игнорирующий результат вызова метода String.Trim.
В следующем примере предыдущее нарушение устраняется присвоением результата метода String.Trim переменной, для которой он вызывался.
В следующем примере показан метод, который не использует создаваемый им объект.
![]() |
---|
Это нарушение нельзя воспроизвести в 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; }
}
};
}
В следующем примере предыдущее нарушение устраняется посредством удаления ненужного создания объекта.
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; }
}
};
}
В следующем примере показан метод, игнорирующий код ошибки, который возвращается собственным методом GetShortPathName.
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();
}
};
}
В следующем примере предыдущее нарушение устраняется посредством проверки кода ошибки и создания исключения при сбое вызова.
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();
}
};
}