正如指示的这里一样,不能对在运行时创建的字符串进行内联。
然而,以下代码:
class Program {
static void Main(string[] args)
{
string s1 = "Programming Is Fun";
string s3 = s1.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}提供(相对于2015年):
True那么,它是否以某种方式指定在运行时生成哪些字符串?
顺便说一下:
守则:
using System;
using System.Text;
class Program {
static void Main(string[] args)
{
string s1 = "hop";
StringBuilder s2 = new StringBuilder(s1);
string s3 = s2.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}提供(相对于2015年):
False与mono相反(ver.4.0.2)
True见工作实例。
发布于 2015-10-06 14:25:38
String.ToString()返回对同一字符串的引用:
public override String ToString() {
Contract.Ensures(Contract.Result<String>() != null);
Contract.EndContractBlock();
return this;
}并且可以在运行时创建字符串。引用您提到的MSDN文章:
运行库并不保证在运行时创建的字符串是内部的。
实习是一项昂贵的操作,通常在运行时进行实习成本太高。如果您想确保您的字符串是内部的,可以使用public static String Intern(String str)方法。
https://stackoverflow.com/questions/32972314
复制相似问题