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

Can I modify the value type object from within the extension method it is calling?

假设我们有以下函数:

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

这将简单地修改参数值"inInt"。

我能否以某种方式获得对调用此静态扩展方法的值类型对象的引用以便对其进行修改?

在 C# 7.2 中,允许引用扩展方法。这在以前的版本中是不允许的。您必须像这样声明方法:

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

然后还使用 VS 2017(需要版本 15.5 或更高版本)和

请注意,当您使用此功能时,调用方必须使用可以在接收方位置充当 ref 的内容(即字段、局部变量或数组槽)来调用该方法。如果您打算以某种流利的方式使用它 API,它可能无法按预期工作。例如,这将无法编译:GetInt().AddTo(1) 因为方法 GetInt 的 return 值不是有效的 ref.

请注意,根据 this issue,上述语法可能需要 15.6,但如果我没看错的话,使用 ref this 应该可以在 15.5 中使用该功能。