我知道字符串是按值发送的,即使它是一个引用类型,但如果我的字符串大小为几十MB,我想将其作为参数发送。
我应该通过参考或价值发送吗?
private int GetIndexOfNext(string String,int SearchStartIndex,char TargetChar)
或
private int GetIndexOfNext(ref string String,int SearchStartIndex,char TargetChar)
答案 0 :(得分:5)
我知道字符串是按值发送的,即使它是a 参考类型
对于字符串或其他引用类型,其地址按值传递。它不是通过的价值,所以对你的情况来说并不重要。 涉及字符串的参数传递的原因看起来不同是因为字符串是不可变的 (当您尝试修改字符串的内容时)。
答案 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';
}
}