Добавление целых чисел в строки в С#

Недавно мне сообщили, что можно объединить целые числа (и другие типы) в строку и наоборот, т.е.

// x == "1234"
// y == "7890"
string x = "123" + 4;
string y = 7 + "890";

По какой-то причине я не думал, что это разрешено, поэтому я всегда использовал (начиная с .NET 2) форму:

// x == "1234"
// y == "7890"
string x = "123" + 4.ToString();
string y = 7.ToString() + "890";

где целые числа преобразуются в строки. Была ли прежняя версия доступна, и я пропустил ее, или это что-то новое для С# 4 (что я сейчас использую)?

Ответ 1

Это всегда было. + эквивалентен string.Concat(), если хотя бы один из операндов является строкой. string.Concat() имеет перегрузку, которая принимает экземпляр object. Внутри он вызовет метод объекта ToString() перед конкатенацией.

Найден соответствующий раздел в спецификации С# 7.7.4 Оператор добавления:

Конкатенация строк:

string operator +(string x, string y);
string operator +(string x, object y);
string operator +(object x, string y);

Оператор binary + выполняет конкатенацию строк, когда один или оба операнды имеют тип string. Если операнд конкатенации строк null, заменяется пустая строка. В противном случае любая строка аргумент преобразуется в его строковое представление, вызывая виртуальный метод ToString, унаследованный от объекта типа. Если ToString возвращает null, заменяется пустая строка.

Ответ 2

Конечно, лучший ответ - использовать какую-то форму:

String.Format("{0},{1}", "123", 4);