为什么我不能将默认参数值赋给扩展方法的this
参数?
public static User CheckLogin(this User user = null)
{
...
}
错误108无法为“this”参数指定默认值
但是,当我写下面的内容时,编译成功了。
public static User CheckLogin([DefaultValue(null)]this User user)
{
...
}
任何人都可以解释为什么MS在允许第二种情况下限制第一种默认参数分配的原因吗?
答案 0 :(得分:7)
这些不是可比较的概念。第一个是编译器支持的可选参数,第二个是设计工具之类的元数据默认值(它没有直接编译器支持代码中的方法调用)。为扩展方法的this
参数设置默认值是没有意义的,因为该值将从调用目标派生。
我最好猜测为什么他们在扩展方法中不支持this
的可选参数是有限的回报(实现成本与开发人员的利益)以及编码风格的混淆。扩展方法将自己设置为现有类型的假额外方法,因此this
可以很好地修复您正在扩展的类型。想要更改this
等于想要更改扩展方法提供的样式,所以您也可以不使用它们。
如果您希望它是可选的,请不要使用扩展方法,而是使用静态方法:
public static User CheckLogin(User user = null)
{
// etc
}
然后拨打“旧”方式:
var user = UserUtils.CheckLogin(/* optional user here */);