我可以在它调用的扩展方法中修改值类型对象吗?

时间:2018-04-17 02:25:40

标签: c# extension-methods

让我们说我们有以下功能:

public static void AddTo(this int inInt, int inAmountToAdd)
{
    inInt += inAmountToAdd;
}

这只会修改参数值“inInt”。

我可以以某种方式获取对调用此静态扩展方法的值类型对象的引用以进行修改吗?

1 个答案:

答案 0 :(得分:4)

在C#7.2中,允许使用ref扩展方法。在以前的版本中不允许这样做。你必须声明这样的方法:

public static void AddTo(this ref int inInt, int inAmountToAdd)
{
    inInt += inAmountToAdd;
}

然后还使用VS {2017(需要15.5或更新版本)和language version set to 7.2 (or latest)

请注意,当您使用此功能时,调用者必须使用可在接收器位置充当ref的内容(即字段,局部变量或数组插槽)调用该方法。如果您计划在某种流畅的API中使用它,它可能无法按预期工作。例如,这将无法编译:{{1​​}},因为方法GetInt的返回值不是有效的GetInt().AddTo(1)

请注意,根据this issue,上述语法可能需要15.6,但如果我正确地阅读此内容,则应使用ref在15.5中提供该功能。