用于更改任何变量或对象值的通用扩展方法

Generic Extension Method for change value of any variable or object

朋友们,谁能介绍一个可以改变任何变量或对象的值的通用扩展方法?

类似于此方法:

public static void Set<T>(this T source, T value)
{
    // some code (source = value)
}

你想要的是不可能的,因为 extension-method 总是在一个类型的特定实例上工作。与所有其他方法一样,方法不能将实例更改为不同的东西(这意味着引用另一个实例),它只能通过调用其任何成员来 修改 该实例。

如果您想知道为什么禁止在 extension-method 上使用 ref,请查看类似的问题:Impossible to use ref and out for first ("this") parameter in Extension methods?.

另一方面,您可以通过使用 ref-关键字的常规方法来做到这一点。

public static void Set<T>(ref T instance)
{
    instance = new Whatever(...);
}

现在你可以使用这个了:

var n = 0;
TheClass.Set(ref n);

但是,如果您想在该方法中做的只是将一个引用替换为另一个引用,为什么不直接使用它呢?

var n = 0;
n = 1;