繁体   English   中英

C#扩展方法中“this”参数的默认值

[英]Default Value for “this” parameter in C# Extension methods

为什么不能给扩展方法的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 */);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM