为什么我不能给扩展方法的this
参数默认参数值?
public static User CheckLogin(this User user = null)
{
...
}
Error 108 Cannot specify a default value for the 'this' parameter
但是,当我像下面这样写时,编译成功了。
public static User CheckLogin([DefaultValue(null)]this User user)
{
...
}
谁能解释一下MS限制第一种默认参数赋值而允许第二种的原因?
最佳答案
这些不是可比较的概念。第一个是编译器支持的可选参数,第二个是设计工具之类的元数据默认值(它没有直接编译器支持代码中的方法调用)。为扩展方法的 this
参数设置默认值是荒谬的,因为该值将从调用目标派生。
关于为什么他们不支持扩展方法中 this
的可选参数,我最好的猜测是返回有限(实现成本与开发人员的利益)和编码风格的困惑。扩展方法将它们自己设置为现有类型的假额外方法,因此 this
非常适合您正在扩展的类型。想要更改 this
就等同于想要更改扩展方法提供的样式,因此您最好不要使用它们。
如果你希望它是可选的,不要使用扩展方法,而是使用静态方法:
public static User CheckLogin(User user = null)
{
// etc
}
然后调用“老”方式:
var user = UserUtils.CheckLogin(/* optional user here */);
关于c# - C# 扩展方法中 "this"参数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16892675/