В разделе 7.10.7 языка программирования C# (А. Хейлсберг и др., четвертое издание 2011 г., аннотация для версии 4.0) говорится, что «когда два отдельных экземпляра строки содержат одинаковые последовательности символов, значения строк равны, но ссылки разные».
Это когда-нибудь случается во время выполнения? Не будут ли среда выполнения .NET и BCL ВСЕГДА помещать две одинаковые строки в один и тот же эталонный блок?
Я понимаю, что в книге говорится о «спецификации», но следующий вопрос — существует ли ЛЮБАЯ известная реализация C#, которая ведет себя таким образом?
РЕДАКТИРОВАТЬ
ОК, что меня действительно беспокоит, так это:
String FirstOne = "StatusOK"
String MiddleOne = "StatusOK"
String LastOne = "StatusOK"
Integer FindMeOne(object AnythingtoFind) { return MsgLst.IndexOf(AnythingToFind) }
List<String> MsgLst;
MsgLst.Add(FirstOne);
MsgLst.Add(MiddleOne);
Msglst.Add(LastOne);
Integer foo = FindMeOne( LastOne );
Я не ожидаю, что foo будет 1! Наверное, я просто глупый.
ОБНОВЛЕНИЕ Все, что мне нужно сделать, чтобы получить то, что я хочу, это:
public class MyNiceStringsThatICanFind
{
private String foobar;
}
Но опять же это не приятно. Если объекты отслеживают себя с помощью HashCode, что такого особенного в строке? Почему среда выполнения не смотрит на ваши объекты и не видит, эй, может быть, это то же самое внутри, давайте сделаем ту же ссылку.
static List<object> MsgLst;
, так и сstatic List<string> MsgLst;
. - person Pieter Geerkens   schedule 25.05.2015List<T>IndexOf(T)
: Выполняет поиск указанного объекта и возвращает отсчитываемый от нуля индекс первого вхождения во всем списке‹T›. Ссылка:msdn.microsoft.com/en-us/library/e4w08k17(v=vs .110).aspx - person Pieter Geerkens   schedule 25.05.2015