Имеет ли значение String.Intern? - PullRequest
3 голосов
/ 31 декабря 2011

String.Intern имеет специальный пул для строк, которые могут быть впоследствии извлечены.

Могу ли я узнать, что указанная строка была взята из пула и былаНЕТ вновь созданный?пример:

string s1 = "MyTest"; 
string s2 = new StringBuilder().Append("My").Append("Test").ToString(); 
string s3 = String.Intern(s2); 
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.

s3 ref val был взят из пула

есть ли у меня какой-нибудь способ узнать это?

Ответы [ 3 ]

5 голосов
/ 31 декабря 2011

Вам может повезти с методом IsInterned, он возвращает null, если строка не была интернирована, и возвращает ссылку, если она была взята из пула.Однако это поведение будет зависеть от времени выполнения и может не дать ожидаемого результата.

4 голосов
/ 31 декабря 2011

Я думаю, что метод IsInterned может помочь вам: http://msdn.microsoft.com/en-us/library/system.string.isinterned.aspx

3 голосов
/ 31 декабря 2011

Да, используйте String.IsInterned().

См. Страницу MSDN .

...