将列表参数作为ref传递

本文关键字:ref 传递 列表 参数 | 更新日期: 2023-09-27 18:20:06

在C#中将列表作为参数作为ref传递的优点是什么?List不是一个值类型,因此对它所做的每一次更改都将在返回函数后反映出来。

class Program
{
    static void Main(string[] args)
    {
        var myClass = new MyClass();
        var list = new List<string>();
        myClass.Foo(ref list);
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}
class MyClass
{
    public void Foo(ref List<string> myList)
    {
        myList.Add("a");
        myList.Add("b");
        myList.Add("c");
    }
}

我可以删除"ref",它会很好地工作。所以我的问题是,我们需要为列表、数组添加ref关键字的用途是什么。。。感谢

将列表参数作为ref传递

ref关键字导致参数通过引用而非值传递。列表是一种引用类型。在您的例子中,您试图通过引用将对象传递给方法参数,同时使用ref关键字。

这意味着你在做同样的事情。在这种情况下,您可以删除ref关键字。

如果要通过引用传递某个Value类型,则需要ref。例如:

class MyClass
{
    public void Foo(ref int a)
    {
        a += a;
    }
}
class Program
{
    static void Main(string[] args)
    {
        int intvalue = 3;
        var myClass = new MyClass();
        myClass.Foo(ref intvalue);
        Console.WriteLine(intvalue);    // Output: 6
    }
}

您可以在那里找到一些额外的规范信息:ref(C#参考)

这将创建新的列表,并将从外部替换list变量:

public void Foo(ref List<string> myList)
{
    myList = new List<string>();
}

这不会替换来自外部的list变量:

public void Foo(List<string> myList)
{
    myList = new List<string>();
}