传递list参数作为ref

时间:2015-11-02 06:26:35

标签: c# list ref

在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关键字... 感谢

2 个答案:

答案 0 :(得分:1)

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

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

这不会取代外部的list变量:

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

答案 1 :(得分:1)

ref 关键字会导致参数通过引用传递,而不是通过值传递。 列表是引用类型。在您的示例中,您还尝试使用ref关键字通过引用传递对象方法参数。

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

如果要通过引用传递某些值类型,则需要

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# Reference)