某SNSの某コミュでの話
string.Emptyと文字列リテラル""について参照比較をした場合の挙動が、
.NET Framework 1.1と2.0で異なることについて。
MSDNを引っ掻き回してみると、
string.Internに.NET Framework 1.1と2.0では
インターンの仕様が変わったよと書いてある。
String.Intern(String) Method (System) | Microsoft Docs
で、実際にコードを書いて試してみた。
using System; namespace EmptyStringIsInterned { public class EmptyStringIsInterned { [STAThread] public static void Main( string[] args ) { Console.WriteLine( null != string.IsInterned( string.Empty ) ); } } }
こいつから.NET Framework 1.1と2.0でそれぞれバイナリを作って試してみた結果
C:\>empty_string_interned.2.0.exe False C:\>empty_string_interned.1.1.exe True
ということで結論
.NET Framework 1.1
Emptyはインターンプールに存在し、中身は文字列リテラル""のため
同一のインスタンスとなり参照比較の結果Trueが返る。