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太大而不能忽略复制应该怎么做?
谢谢。
答案 0 :(得分:2)
无论编译器的优化如何(不管怎样,不会在这里产生太多差异),C#中的string
类型总是通过引用传递。
此外,string
引用是不可变的。这意味着您的WriteString
函数不会在第一时间编译。
StringBuilder builder = new StringBuilder(myString);
builder[0] = 'b';
myString = builder.ToString();
当然,请注意,此解决方案不会更改对函数外部string
的任何引用。为此,请将其作为ref
参数传递。