C#字符串作为函数参数传递

时间:2014-08-01 02:58:57

标签: c#

string myString;

void WriteString( string myString ) // This myString is copied. 
{
    // Writing to myString. 
    myString[0] = 'b'; // chaning this is just changing copy
}


void ReadString( string myString ) // Is this myString copied, eventhough I'm not writing at all?
{
   if( myString[0] == 'a' ) // calling just get property in string
      DebugConsole.Write("I just read myString and first character was 'a'");
}

您好。我想知道,在上面的例子中,编译器是否会区分两个函数并尝试通过传递myString作为引用或内联函数来优化ReadString函数。如果不是这样的话,如果myString太大而不能忽略复制应该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:2)

无论编译器的优化如何(不管怎样,不会在这里产生太多差异),C#中的string类型总是通过引用传递。

此外,string引用是不可变的。这意味着您的WriteString函数不会在第一时间编译。

StringBuilder builder = new StringBuilder(myString);
builder[0] = 'b';
myString = builder.ToString();

当然,请注意,此解决方案不会更改对函数外部string的任何引用。为此,请将其作为ref参数传递。