参考或价值大的字符串?

时间:2014-01-31 18:47:39

标签: c#

我知道字符串是按值发送的,即使它是一个引用类型,但如果我的字符串大小为几十MB,我想将其作为参数发送。

我应该通过参考或价值发送吗?

private int GetIndexOfNext(string String,int SearchStartIndex,char TargetChar)

private int GetIndexOfNext(ref string String,int SearchStartIndex,char TargetChar)

3 个答案:

答案 0 :(得分:5)

  

我知道字符串是按值发送的,即使它是a   参考类型

对于字符串或其他引用类型,其地址按值传递。它不是通过的价值,所以对你的情况来说并不重要。 涉及字符串的参数传递的原因看起来不同是因为字符串是不可变的 (当您尝试修改字符串的内容时)

您应该看到:Parameter passing in C# by Jon Skeet

答案 1 :(得分:3)

没有string,可以将其作为ref传递。不复制字符串,您只是传递了方法的引用副本,而不是字符串的副本。

答案 2 :(得分:0)

小(不安全)测试将显示它是传递的字符串地址而不是字符串的副本。

    static void Main(string[] args)
    {
        String s = "aaa";

        Console.WriteLine(s); // Prints aaa
        F(s);
        Console.WriteLine(s); // Prints aba
        Console.ReadLine();
    }

    static unsafe void F(String s)
    {
        fixed (char* p = s)
        {
            p[1] = 'b';
        }
    }