用于更改任何变量或对象值的通用扩展方法
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;
朋友们,谁能介绍一个可以改变任何变量或对象的值的通用扩展方法?
类似于此方法:
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;