“;this"”的默认值参数在c#扩展方法中
本文关键字:扩展 方法 参数 this quot 默认值 | 更新日期: 2023-09-27 18:16:27
为什么我不能给扩展方法的this
参数默认参数值?
public static User CheckLogin(this User user = null)
{
...
}
错误108无法为'this'参数指定默认值
但是,当我像下面这样编写时,编译成功了。
public static User CheckLogin([DefaultValue(null)]this User user)
{
...
}
谁能解释一下为什么MS限制第一种默认参数赋值而允许第二种?
这些都是不可比较的概念。第一个是编译器支持的可选参数,第二个是设计工具之类的元数据默认值(它没有直接编译器支持代码中的方法调用)。为扩展方法的this
参数设置默认值是没有意义的,因为该值将派生自调用目标。
我最好的猜测,为什么他们不支持this
的可选参数的扩展方法是有限的回报(实现的成本vs开发人员的利益)和编码风格的混乱。扩展方法将自己设计为现有类型上的额外方法,因此this
很好地固定在您正在扩展的类型上。想要改变this
就等于想要改变扩展方法所提供的样式,所以你最好不要使用它们。
如果你希望它是可选的,不要使用扩展方法,而是使用静态方法:
public static User CheckLogin(User user = null)
{
// etc
}
然后调用"旧"方式:
var user = UserUtils.CheckLogin(/* optional user here */);