2012-07-30 57 views
2

是否执行以下代码每次调用方法并将其计算为true时,都会创建3个新字符串,或者编译足够聪明以将右侧字符串编译为常量?在平等测试中使用字符串文字是否创建新字符串?

if (somestring == "Test" || someString == "Test1") 
{ 
    ... 
    NotifyPropertyChanged("Name"); 
} 
+2

'把右手边的字符串编译成常量'好吧,我希望看到他们*是*常量。 – asawyer 2012-07-30 19:48:59

回答

7

它们是文字,这意味着它们都装载有ldstr操作码,即

ldstr "Test1" 

这样做的影响是:任何通过0123去是自动扣留,所以,你可以这样做:

string x = "abc"; 
string y = "abc"; 
bool sameInstance = ReferenceEquals(x,y); // true 

所以:是的,第一次使用该方法中,文字​​,"Test1""Name"可以被创建,但只有一次。之后,使用相同的现有字符串实例。这是通过ldstr保证:

公共语言基础结构(CLI)保证两个ldstr指令指的是具有相同的字符序列的两个元数据标记的结果返回精确地相同的字符串对象(被称为处理“串入”)。

+0

我永远不知道这个机制,整洁。 – asawyer 2012-07-30 19:58:51

相关问题