MSDNはString.InternとString.IsInternedの違いは何ですか?
String.Internが
と
String.IsInternedが指定された文字列に 参照を取得し、指定された文字列にシステムの 参照を取得することを述べています。
私はIsInternedが、指定された文字列が保留されているかどうかを示すブールを返す必要があると思います。それは正しい考えですか?つまり、.netフレームワーク命名規則と少なくとも一貫していません。
Iは、次のコードを書いた:
string s = "PK";
string k = "PK";
Console.WriteLine("s has hashcode " + s.GetHashCode());
Console.WriteLine("k has hashcode " + k.GetHashCode());
Console.WriteLine("PK Interned " + string.Intern("PK"));
Console.WriteLine("PK IsInterned " + string.IsInterned("PK"));
が出力される。
のハッシュコード-837830672
kはハッシュコード-837830672
PKインターンを有し有しますPK
PK IsInterned PK "PK" を返すなぜ( "PK")string.IsInternedさ
?
あなたは、文字列の詳細についての詳細やインターンをお知りになりたい場合は私の答えを参照してください。この質問にはhttp://stackoverflow.com/questions/372547/where-do-java-and-net-string-literals-reside/372559#372559 –
名前は非常に長いです。おそらく、それは "IfInterned"のタイプミスでした。 – Greg
'GetHashCode'の使用に注意してください。' System.String'クラス*が* GetHashCode()をオーバーライドすることに注意してください。したがって、このようなメソッド呼び出しは、インスタンスが異なる可能性があるかどうかを確認するためには役に立ちません。代わりに 'using System.Runtime.CompilerServices;'ディレクティブを含め、 'RuntimeHelpers.GetHashCode(string)'を使用してください。これは良い例です: 'string s =" PK ";文字列t = 'P'.ToString()+ "K";コンソール。WriteLine( "sはオーバーライドされていないハッシュコードを持つ" + RuntimeHelpers.GetHashCode(s)); Console.WriteLine( "tはオーバーライドされていないハッシュコード" + RuntimeHelpers.GetHashCode(t)); '。 –