Вставки строки C # перепутаны с необязательными параметрами - PullRequest
0 голосов
/ 18 мая 2009

Я довольно новичок в 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" в качестве первого аргумента?

Ответы [ 3 ]

9 голосов
/ 18 мая 2009

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

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

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

myClass = new MyClass(string.Format("abc{0}ghi", toInsert));
5 голосов
/ 18 мая 2009

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

public MyClass(string format, params object[] args)
{
  this.FormattedValue = string.Format(format, args);
}
2 голосов
/ 18 мая 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...