c# - CA1026(所有参数都应该有默认值)和扩展方法

标签 c# extension-methods code-analysis fxcop

前提

使用带有 C# 可选参数的代码分析(或 fxCop)时,您会收到 CA1026 的警告.简短的原因1 没有为所有参数提供默认值。

下面的声明正确地产生了这个警告

public Color GetColor(bool red, bool blue = true, bool green = true)

然而,在某些情况下,您无法为所有参数提供默认值,这就是扩展方法。所以下面的声明由于第一个参数而产生了警告:

public static bool ValidateRules(this string s, Rules rules = Rules.Default)

编译器不会让您为 this 参数指定默认值,因此仅有的两个解决方案是:

  1. 忽略警告,我不喜欢这样做,因为它会导致不良做法。
  2. 不使用扩展方法,我不喜欢这样做,因为我发现扩展方法使代码更易读。

问题

  • 是否只有以上两个选项 解决这个问题的方法?
  • 是 fxCop/代码 检查中的分析不正确?

  1. The long reason

最佳答案

它不会警告您所有 参数没有默认值 - 它警告您根本 使用可选参数。

我个人会禁用此特定警告。谨慎使用时,我认为可选参数很好。您应该仔细考虑它们,特别是在不支持它们的语言(包括 v4 之前的 C#)中默认参数值 的版本控制方面,但在许多环境中,缺点确实不是一个问题 - 与在各处指定重载相比,您最终得到的代码要简单得多。

关于c# - CA1026(所有参数都应该有默认值)和扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291958/

相关文章:

c# - 在 json.net 中重命名 JProperty

c# - 包的用途 "Microsoft.EntityFrameworkCore.Design"

c# - 你用过私有(private)扩展方法吗?

c - 是否有工具可以列出 C 函数使用和输出的全局变量?

c# - 使用 Roslyn 检测 lambda 表达式的长度

c# - CA1063 修改 Dispose() 使其调用 Dispose(true),然后在当前对象实例上调用 GC.SuppressFinalize,然后返回

c# - 使用 Json.Net 解析 Google Maps Geocode API

c# - 一次将对象从List <T>中拉出多个ID?

c# - 如何调用动态类型的扩展方法?

asp.net-mvc - 未找到 Html 帮助程序扩展