Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA1806:不要忽略方法结果

CA1806:不要忽略方法结果

作者头像
呆呆
发布于 2022-02-19 10:52:33
发布于 2022-02-19 10:52:33
9770
举报
文章被收录于专栏:centosDaicentosDai

规则 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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA1024:在适用处使用属性
在大多数情况下,属性表示数据,方法执行操作。 访问属性的方式类似于访问字段,这使得它们更易于使用。 如果一个方法具备以下条件之一,则该方法可能很适合成为属性:
用户4268038
2022/01/10
5340
CA1715:标识符应具有正确的前缀
接口名称应以大写的“I”开头,后跟另一个大写字母。 此规则报告与接口名称(如“MyInterface”和“IsolatedInterface”)相关的冲突。
呆呆
2022/02/19
5900
CA1012:抽象类型不应具有公共构造函数
抽象类型的构造函数只能由派生类型调用。 由于公共构造函数可创建类型的实例,但无法创建抽象类型的实例,因此具有公共构造函数的抽象类型在设计上是错误的。
用户4268038
2022/01/10
6070
CA1056:URI 属性不应是字符串
类型声明名称包含“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”的字符串属性。
呆呆
2022/02/22
5760
CA1054:URI 参数不应为字符串
类型声明一个方法,该方法具有名称中包含“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”的字符串参数,且类型未声明采用 System.Uri 参数的相应重载。
呆呆
2022/01/10
6430
CA1055:URI 返回值不应是字符串
方法名称包含“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”,且方法返回一个字符串。
呆呆
2022/01/10
5930
CA1802:在合适的位置使用文本
某个字段被声明为 static 和 readonly(在 Visual Basic 中为 Shared 和 ReadOnly),并使用可在编译时计算的值初始化。
呆呆
2022/02/19
8670
CA1721:属性名不应与 get 方法冲突
成员的名称以“Get”开头,且其余部分与属性的名称匹配。 例如,包含名为“GetColor”的方法和名为“Color”的属性的类型将导致规则冲突。
呆呆
2022/02/19
4400
CA1819:属性不应返回数组
即使属性是只读的,该属性返回的数组也不受写入保护。 若要使数组不会被更改,属性必须返回数组的副本。 通常,用户不能理解调用这种属性的负面性能影响。 具体来说,他们可能将索引属性作为属性使用。
呆呆
2022/02/19
1.1K0
CA1060:将 P/Invoke 移动到 NativeMethods 类
方法使用平台调用服务访问非托管代码,不是 NativeMethods 类之一的成员。
呆呆
2022/01/10
7370
CA1003:使用泛型事件处理程序实例
某个类型包含的委托返回 void,且该委托的签名包含两个参数(第一个参数是对象,第二个参数是可以分配给 EventArgs 的类型),而且包含程序集面向的是 .NET。
用户4268038
2022/01/09
6110
CA1021:避免使用 out 参数
按引用(使用 out 或 ref)传递类型要求具有使用指针的经验,了解值类型和引用类型的不同之处,以及能处理具有多个返回值的方法。 另外,out 和 ref 参数之间的区别并未得到广泛了解。
用户4268038
2022/01/10
5740
CA1045:不要通过引用来传递类型
公共类型中的公共或受保护方法有一个 ref 参数,该参数采用基元类型、引用类型或不属于内置类型的值类型。
呆呆
2022/01/10
5750
CA1019:定义特性参数的访问器
特性可以定义强制自变量,在对目标应用该特性时必须指定这些自变量。 这些实参也称为位置实参,因为它们将作为位置形参提供给特性构造函数。 对于每一个强制变量,特性还必须提供一个相应的只读属性,以便可以在执行时检索该变量的值。 此规则检查是否已为每个构造函数参数定义了相应属性。
用户4268038
2022/01/10
5170
CA1018:用 AttributeUsageAttribute 标记特性
自定义特性上不存在 System.AttributeUsageAttribute 特性。
用户4268038
2022/01/10
2090
【愚公系列】2023年02月 .NET/C#知识点-委托、匿名方法、Lambda、泛型委托、表达式树的进化史
在 .NET 中,委托是一种类型,它可以持有对一个或多个方法的引用,并允许将这些方法作为参数传递给其他方法。.NET 中的委托类似于 C 和 C++ 中的函数指针,但具有更高的类型安全性和其他功能。
愚公搬代码
2023/02/16
8120
CA1050:在命名空间中声明类型
应在命名空间内声明类型以避免名称冲突,并作为一种在对象层次结构中组织相关类型的方式。 任何命名的命名称空间之外的类型均位于无法在代码中引用的全局命名空间中。
呆呆
2022/01/10
5710
CA1062:验证公共方法的参数
外部可见方法取消引用其中一个引用参数,而不验证该参数是否 null(Visual Basic 中 Nothing)。
呆呆
2022/01/10
8620
CA1044:属性不应是只写的
Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。
呆呆
2022/01/10
2380
CA1820:使用字符串长度测试是否有空字符串
使用 String.Length 属性或 String.IsNullOrEmpty 方法比较字符串比使用 Equals 更快。 这是因为 Equals 执行的 MSIL 指令比 IsNullOrEmpty 或执行以用于检索 Length 属性值并将其与零进行比较的指令数要多得多。
呆呆
2022/02/19
3670
相关推荐
CA1024:在适用处使用属性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档