c#作为函数参数传递的字符串
本文关键字:字符串 参数传递 函数 | 更新日期: 2023-09-27 18:15:58
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太大而不能忽略复制,应该怎么做?
谢谢。
不考虑编译器的优化(不,这里不会有那么大的区别),c#中的string
类型总是通过引用传递的。
此外,string
引用是不可变的。这意味着你的WriteString
函数一开始就不会编译。
StringBuilder builder = new StringBuilder(myString);
builder[0] = 'b';
myString = builder.ToString();
当然要注意,这个解决方案不会改变在函数之外对string
的任何引用。为了做到这一点,将其作为ref
参数传递。