Тема для многих не новая, но её тупость не теряет актуальности. Речь идёт об "
интернировании строк", коей MS конечно же горда до усрачки!
Грабли, которые она заботливо разложила, не нужно долго искать, вот простой код:
var s1 = "stroka";
var s2 = "stroka";
var lst = new List<string>();
lst.Add(s1);
lst.Add(s2);
Console.WriteLine("I=" + lst.IndexOf(s2));
Как вы уже догадались, выведется "I=0". НО ПОЧЕМУ??
Где логика? В какой идиотской стране два одинаково выглядящих дома имеют ОДИН АДРЕС?
А чем строки отличаются от домов? Да ничем!
Выглядеть одинаково != быть одним и тем же.
Но здесь ручка грабель только начинается, вот слегка модифицированный код:
var s1 = "stroka";
var s2 = "stroka";
var lst = new List<string>();
lst.Add(s1);
lst.Add("чупакабра");
lst.Add(s2);
lst.Remove(s2);
Console.WriteLine(Fmt.JSON(lst));
Вывод (логичный с т.з. MS) будет ["чупакабра","stroka"] , но мы же хотели удалить ВТОРОЙ экземпляр "stroka", какого чёрта?? Мы-то (наивные) ожидаем ["stroka", "чупакабра"]!
Чувствуете, как на лбу почёсывается шишка? Вот это оно! ЗАБОТА и "преждевременная оптимизация" 20-летних усатых "сеньоров". Как так можно глупо подходить к проблеме?? Неужели им самим не прилетало от подобных оптимизаций? Ах, да... они же "пилят компилятор", какое им дело до ваших... хм... ничтожных "прикладных задач"!
Думаете, в Core кто-то уберёт эти грабли? Как бы не так! Будут жрать, плакать, снова колоться, но кактус не бросят.
По-уму, надо было оставить сравнение строк (s1 == s2) ровно таким же, как для объектов — через сравнение ссылок. И ТОЛЬКО если речь идёт о контенте, сделать отдельный оператор
(s1
eq s2) или case-insensitive вариант (s1
ieq s2). Всё. Но разве может "поколение с бейсиком головного мозга" думать категориями Си?! Не даром они этот бейсик до 2021 года дотащили — по уму и инструмент.
Кому-то задачка может показаться узконаправленной, но вот не так это. Всплыла она на "простой ГУЙне", где всего-то и нужны были
упорядоченные строки. "Чего может быть проще?", — подумал мой мозг и забыл надеть каску.
Ну и напоследок вопрос: кому-то вообще пригождались их вот эти "интернирования"?? Что, прямо в каждой программе миллионы одинаковых строк, что надо было усираться и экономить байты? Сэкономили — с гулькин писюн, а насрали на 20 лет вперёд! И они за это ещё получают зарплату...