以下代码在每次调用方法并计算为true时编译3个新字符串,或者编译是否足够聪明以将右侧字符串编译为常量?
if (somestring == "Test" || someString == "Test1")
{
...
NotifyPropertyChanged("Name");
}
答案 0 :(得分:7)
它们是文字,这意味着它们加载了ldstr
操作码,即
ldstr "Test1"
这样做的影响是:经过ldstr
的任何内容都自动实习,因此,您可以这样做:
string x = "abc";
string y = "abc";
bool sameInstance = ReferenceEquals(x,y); // true
所以:是的,第一次使用该方法时,可以创建文字"Test"
,"Test1"
和"Name"
,但只能创建一次。之后,使用相同的现有字符串实例。这由ldstr
保证:
公共语言基础结构(CLI)保证引用具有相同字符序列的两个元数据标记的两个ldstr指令的结果精确地返回相同的字符串对象(称为“字符串实习”的过程)。
答案 1 :(得分:5)
它会实现字符串。
公共语言运行库通过维护a来保存字符串存储 表,称为实习池,包含单个引用 以编程方式声明或创建的每个唯一文字字符串 你的计划。因此,带有一个文字字符串的实例 特殊值仅在系统中存在一次
http://msdn.microsoft.com/en-us/library/system.string.intern.aspx
http://broadcast.oreilly.com/2010/08/understanding-c-stringintern-m.html