Вставки строк C# путают с необязательными параметрами

StackOverflow https://stackoverflow.com/questions/877811

Вопрос

Я новичок в C# и пытаюсь разобраться в вставках строк (т.е. "some {0} string", toInsert), и столкнулся с проблемой, которую не ожидал...

В случае, когда у вас есть два конструктора:

public MyClass(String arg1) { ... }

public MyClass(String arg1, String arg2) { ... }

Могу ли я использовать первый конструктор со вставкой строки?

...
toInsert = "def"
myClass = new MyClass("abc{0}ghi", toInsert)
...

Или C# интерпретирует это как второй конструктор и передаст литерал "abc{0}ghi" в качестве первого аргумента?

Это было полезно?

Решение

Да, это будет интерпретироваться как второй параметр.

Поведение, которое вы описываете, называется форматированием строк, и все, что принимает строки в этом стиле, использует string.Format() в фоновом режиме.Подробности смотрите в документации этого метода.

Чтобы получить желаемое поведение, используйте этот код:

myClass = new MyClass(string.Format("abc{0}ghi", toInsert));

Другие советы

Просто делать:

public MyClass(string format, params object[] args)
{
  this.FormattedValue = string.Format(format, args);
}

Или C# будет интерпретировать это как второй конструктор и передаст буквальный «ABC {0} Ghi» в качестве первого аргумента?

Это правильный ответ.Я думаю, если вы используете String.Format("abc{0}ghi", toInsert), тогда он возьмет первый конструктор

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top