前提
使用带有 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 参数指定默认值,因此仅有的两个解决方案是:
- 忽略警告,我不喜欢这样做,因为它会导致不良做法。
- 不使用扩展方法,我不喜欢这样做,因为我发现扩展方法使代码更易读。
问题
- 是否只有以上两个选项 解决这个问题的方法?
- 是 fxCop/代码 检查中的分析不正确?
最佳答案
它不会警告您所有 参数没有默认值 - 它警告您根本 使用可选参数。
我个人会禁用此特定警告。谨慎使用时,我认为可选参数很好。您应该仔细考虑它们,特别是在不支持它们的语言(包括 v4 之前的 C#)中默认参数值 和 的版本控制方面,但在许多环境中,缺点确实不是一个问题 - 与在各处指定重载相比,您最终得到的代码要简单得多。
关于c# - CA1026(所有参数都应该有默认值)和扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291958/