gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:26:29 25 4
gpt4 key购买 nike

假设我们有以下功能:

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

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

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

最佳答案

在 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 中使用它,它可能无法按预期工作。例如,这将无法编译:GetInt().AddTo(1) 因为方法 GetInt 的返回值不是有效的 ref

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

关于c# - 我可以从它调用的扩展方法中修改值类型对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49868914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com