一尘不染

扩展方法中的第一个(“ this”)参数不能使用ref和out吗?

c#

为什么禁止Extension Method使用ref修饰符调用?

这是可能的:

public static void Change(ref TestClass testClass, TestClass testClass2)
{
    testClass = testClass2;
}

而这个不是:

public static void ChangeWithExtensionMethod(this ref TestClass testClass, TestClass testClass2)
{
    testClass = testClass2;
}

但为什么?


阅读 325

收藏
2020-05-19

共1个答案

一尘不染

您必须指定refout明确。您将如何使用 扩展方法 执行此操作?此外,您真的 这么做吗?

TestClass x = new TestClass();
(ref x).ChangeWithExtensionMethod(otherTestClass);
// And now x has changed?

还是ref只为扩展方法中的第一个参数指定零件?

老实说,这对我来说听起来很奇怪,并且是不可读(或至少难于预测)代码的秘诀。

2020-05-19