CA1806: No omitir resultados del método
Nombre de tipo |
DoNotIgnoreMethodResults |
Identificador de comprobación |
CA1806 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No |
Causa
Hay varios motivos posibles para esta advertencia.
Se creó un objeto nuevo pero nunca se utilizó.
Se llama a un método que crea y devuelve una cadena nueva y la nueva cadena nunca se utiliza.
Un método COM o P/Invoke devuelve un código de error o HRESULT que nunca se utiliza. Descripción de la regla
La creación innecesaria de objetos y la recolección de elementos no utilizados asociada al objeto no utilizado reducen el rendimiento.
Las cadenas son inmutables y métodos como String.ToUpper devuelven una nueva instancia de una cadena en lugar de modificar la instancia de la cadena en el método de llamada.
La omisión de un código de error o HRESULT puede producir un comportamiento inesperado en situaciones de error o de escasez de recursos.
Cómo corregir infracciones
Si el método A crea una nueva instancia del objeto B que nunca se utiliza, pase la instancia como argumento a otro método o asigne la instancia a una variable. Si la creación del objeto no es necesaria, quítela. -O bien-
Si el método A llama al método B pero no utiliza la nueva instancia de la cadena devuelta por el método B, pase la instancia como argumento a otro método, asigne la instancia a una variable o quite la llamada si no es necesaria.
O bien
Si el método A llama al método B pero no utiliza el código de error o HRESULT devuelto por el método B, utilice el resultado de una instrucción condicional, asigne el resultado a una variable o páselo como argumento a otro método.
Cuándo suprimir advertencias
No suprima ninguna advertencia de esta regla a menos que la creación del objeto sirva para algún propósito.
Ejemplo
En el ejemplo siguiente se muestra una clase que omite el resultado de la llamada a String.Trim.
En el ejemplo siguiente se corrige la infracción anterior asignando de nuevo el resultado de String.Trim a la variable en la que se realizó la llamada.
En el ejemplo siguiente se muestra un método que no utiliza ningún objeto de los que crea.
Nota
Esta infracción no puede reproducirse 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; }
}
};
}
En el ejemplo siguiente se corrige la infracción anterior quitando la creación innecesaria de un objeto.
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; }
}
};
}
En el ejemplo siguiente se muestra un método que omite el código de error que el método nativo GetShortPathName devuelve.
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();
}
};
}
En el ejemplo siguiente se corrige la infracción anterior comprobando el código de error e iniciando una excepción si la llamada no se realiza correctamente.
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();
}
};
}