В чем разница между {0} и +?

Существует ли какая-либо разница между использованием {0} и +, так как они выполняют одну и ту же работу по печати длины на экране:

Console.WriteLine("Length={0}", length);
Console.WriteLine("Length="   + length);

Ответ 1

В вашем тривиальном примере нет разницы. Но есть очень веские причины предпочесть форматированный вариант ({0}): он значительно облегчает локализацию международного программного обеспечения и значительно упрощает редактирование существующих строк третьими сторонами.

Представьте себе, например, что вы пишете компилятор, который создает это сообщение об ошибке:

"Cannot implicitly convert type 'int' to 'short'"

Вы действительно хотите написать код

Console.WriteLine("Cannot implicitly convert type '" + sourceType + "' to '" + targetType + "'");

? Боже мой нет. Вы хотите поместить эту строку в ресурс:

"Cannot implicitly convert type '{0}' to '{1}'"

а затем напишите

Console.WriteLine(FormatError(Resources.NoImplicitConversion, sourceType, targetType));

Потому что тогда у вас есть свобода решать, что вы хотите изменить это:

"Cannot implicitly convert from an expression of type '{0}' to the type '{1}'"

или

"Conversion to '{1}' is not legal with a source expression of type '{0}'"

Эти варианты могут быть сделаны позже английскими специалистами без необходимости внесения изменений в код.

Вы также можете перевести эти ресурсы на другие языки, снова без изменения кода.

Начать всегда с помощью форматирования строк; когда вам нужно написать локализованное программное обеспечение, которое правильно использует строковые ресурсы, вы уже привыкли.

Ответ 2

Вторая строка создаст строку и напечатает строку. Первая строка будет использовать составное форматирование, например string.Format.

Здесь есть некоторые веские причины использовать композитное форматирование.

Ответ 3

Есть разница.

Пример:

Console.WriteLine("the length is {0} which is the length", length);
Console.WriteLine("the length is "+length+" which is the length");

+ объединяет две строки, {0} является заполнителем для строки, которую нужно вставить.

Ответ 4

{n} является заполнителем, который может использоваться с несколькими опциями. где n - число

В вашем примере это будет иметь значение, и конечный результат будет таким же, что и конкатенация двух строк. Однако в чем-то вроде

var firstName = "babba";
var lastName ="abba";
var dataOfBirth = new Date();

Console
   .Write(" Person First Name : {0} | Last Name {1} }| Last Login : {2:d/M/yyyy HH:mm:ss}", 
          firstName, 
          secondName, 
          dateOfBirth);

он обеспечивает удобный для чтения интерфейс с легким форматированием

Ответ 5

{n} где n >= 0 позволяет подставлять значения в порядке их появления в строке.

string demo = "demo", example = "example";
Console.WriteLine("This is a {0} string used as an {1}", demo, example);

+ позволяет объединить две или более строки вместе.

Console.WriteLine("This is a " + demo + " string used as an " + example);