Опция 3 не компилируется, потому что вы не можете разыграть int
до string
.
Два других дают одинаковый результат. Однако есть небольшая разница.
Внутренне оператор плюс компилирует вызов String.Concat
. Concat
имеет различные перегрузки. Вариант 1 вызывает Concat(string, string, string)
, в то время как вариант 2 вызывает Concat(object, object, object)
с двумя строками и упакованным int. Внутренне Concat
затем вызывает ToString
в упакованном int.
Также проверьте этот связанный вопрос: Строки и целые, явные и неявные