给定以下对象及其扩展名:

public class MyObj
{
    string var1 = "100";
    string var2 = "200";
}

public static void DoSomething(this MyObj myobj)
{
    myobj = new MyObj()
    myobj.var1 = "100000";
    myobj.var2 = "200000";
}


请注意,扩展方法实例化了一个新实例并将其分配给它自己。但是,当我这样做时,我的对象实际上并未按预期更新。它仍然包含旧的变量值,并且保持不变。

MyObj myobj = new MyObj();
myobj.DoSomething();

//myobj.var1 is still 100, but expected it to be 100000;
//myobj.var1 is still 200, but expected it to be 200000;


如何使我的对象按预期进行更新-可以这样做吗?

最佳答案

您不能通过扩展方法为其自身分配另一个实例。您只是在更改对局部变量myobj的引用。

您可以使用ref从静态方法执行此操作:

public static void DoSomething(ref MyObj myobj)
{
    myobj = new MyObj()
    myobj.var1 = 100000;
    myobj.var2 = 200000;
}


用法:

MyObj myobj = null;
DoSomething(ref myobj);
// myobj is set here

10-02 00:02
查看更多