值
规则 ID
CA1806
类别
使用情况
修复是中断修复还是非中断修复
非中断
原因
出现此警告有几个可能的原因:
创建了一个新的对象,但从未使用过它。
调用了一个创建并返回新字符串的方法,但从未使用过这个新字符串。
从未使用过的 COM 或 P/Invoke 方法,它返回 HRESULT 或错误代码。
从未使用过的语言集成查询 (LINQ) 方法,该方法返回结果。
规则说明
不必要的对象创建和未使用对象的关联垃圾回收会降低性能。
字符串是不可变的,并且 String.ToUpper 等方法返回字符串的新实例,而不是在调用方法中修改字符串的实例。
忽略 HRESULT 或错误代码可能导致在错误情况下或资源不足的情况下发生异常行为。
已知 LINQ 方法不具有副作用,因此不应忽略其结果。
如何解决冲突
如果方法 A 创建从未使用的 B 对象的新实例,请将该实例作为参数传递给另一个方法,或将该实例分配给一个变量。 如果不需要创建对象,则将其删除。
-或-
如果方法 A 调用方法 B,但不使用方法 B 返回的新字符串实例,请将此实例作为参数传递给另一个方法,或将此实例分配给一个变量。 如果不需要该调用,可以将其删除。
-或-
如果方法 A 调用方法 B,但不使用 HRESULT 或方法返回的错误代码,请在条件语句中使用该结果、将该结果分配给一个变量,或将它作为参数传递给另一个方法。
-或-
如果 LINQ 方法 A 调用方法 B,但不使用结果,请在条件语句中使用该结果、将该结果分配给一个变量,或将它作为参数传递给另一个方法。
何时禁止显示警告
请勿禁止显示此规则发出的警告,除非创建对象的行为可用于实现某些目的。
示例 1
下面的示例演示一个类,该类忽略调用 String.Trim 的结果。
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; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
' Violates this rule
title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
示例 2
下面的示例通过将 String.Trim 的结果分配回在其上调用的变量来修复之前的冲突。
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; }
}
}
Public Class Book
Public Sub New(ByVal title As String)
If title IsNot Nothing Then
title = title.Trim()
End If
Me.Title = title
End Sub
Public ReadOnly Property Title() As String
End Class
示例 3
下面的示例演示了一个方法,该方法不使用它创建的对象。
备注
Visual Basic 中无法重现此冲突。
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
// Violates this rule
new Book();
return new Book();
}
}
示例 4
下面的示例通过删除不必要的对象创建来修复之前的冲突。
public class Book
{
public Book()
{
}
public static Book CreateBook()
{
return new Book();
}
}
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。