@Dexter_Legseto
Junior AR C# dev & 3D hobbyist

Почему сравнение эта string строка не равна такой же строке после string.Format()?

Почему будет выведено True True True False в консоль? (*Почему второе и четвертое значение не одинаковы?)

static void Main(string[] args)
 { 
            var client = "1 2";
            var broker = "1 " + "2";
            var agent = string.Format("{0} {1}", "1", "2");

            Console.WriteLine(broker);
            Console.WriteLine(agent);
            Console.WriteLine("{0}, {1}, {2}, {3}",

            client == broker,
            (object)client == (object)broker,
            agent == client,
            (object)agent == (object)client);
}
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@Meloman19
Потому что сравнение string и сравнение object - это разные вещи.
String сравнивается посимвольно, как и должно быть, а у object сравниваются ссылки на экземпляры.

Переменные client и broker компилятор для оптимизации ссылает на один и тот же экземпляр string, поэтому сравнение их, как object, возвращает True. В случае же agent, создаётся новый экземпляр string (Format вызывает new string()), поэтому сравнение их, как object, возвращает False.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Если нужно чтобы искало одинаковые строки и не генерировала новые, то можно заменить на
var agent = string.Intern(string.Format("{0} {1}", "1", "2"));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы