c# - 有一种方法可以在 C# 中使用可变参数按引用传递吗?

标签 c# reference parameters

我想要一个函数来修改一些可变参数列表,但它们都是值类型(int、string)。有没有一种方法可以使 params 关键字与 ref 关键字或类似关键字一起使用?

public void funcParams(params object[] list)
{
   /* Make something here to change 'a', 'b' and 'c' */
}

public void testParams()
{
    int a = 1, b = 2, c = 3;

    funcParams(a, b, c);
}

问题是,我试图通过创建一种修改对象字段的方法让我的生活更轻松。我正在使用 Cecil 进行一些动态代码生成,并试图避免编写过多的 IL 生成代码。

为了简化,我想通过引用传递字段列表,我需要更改为更改它们的函数,而不是通过生成相应的 IL 来更改它们。一些参数可以为空,这会使代码生成更加痛苦。在这种情况下,制作一些重载方法而不是参数不会有多大用处。

最佳答案

好吧,你可以声明一些重载,即

public void FuncParams(ref int a) {...}
public void FuncParams(ref int a, ref int b) {...}

等等

否则,您将不得不从数组中读回(因为 params 的真正意思是“隐式数组”):

object[] args = {1,2,3};
funcParams(args);
Console.WriteLine(args[0]); // updated
Console.WriteLine(args[1]); // updated
Console.WriteLine(args[2]); // updated

(当然,如果只接受int,最好全程使用int[])

关于c# - 有一种方法可以在 C# 中使用可变参数按引用传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435049/

相关文章:

c# - 什么相当于 Visual Studio Code VSCode 中的 TAB +TAB

c# - 如何更新特定的 XElement?

c# - 最终用户需要什么来运行 C# 控制台程序?

c# - for-loop 以覆盖基于步进符号增加/减少的范围

Java 基类引用变量

C++ 如何处理函数中指针和引用的变化?

sql - Crystal 报表参数选择有限制吗?

c++ - 如何在函数内部访问 Mat 类型参数的变量名

c - 为什么不能修改在函数中作为 const 通过引用传递的地址之后的下一个地址的值?

C++ 将枚举作为参数传递