Можно ли включить переменную C # в строковую переменную без использования конкатенатора? - PullRequest
10 голосов
/ 12 апреля 2011

Позволяет ли .NET 3.5 C # включать переменную в строковую переменную без необходимости использовать + concatenator (или, если на то пошло, string.Format ()).

Например (в псевдо я использую символ $, чтобы указать переменную):

DateTime d = DateTime.Now;
string s = "The date is $d";
Console.WriteLine(s);

Выход:

Дата: 4/12/2011 11:56:39

Редактировать

Из-за нескольких ответов, в которых предлагался string.Format (), я могу только предположить, что мой оригинальный пост не был понятным, когда я упомянул " ... (или string.Format (), если на то пошло ) ». Чтобы было ясно, я хорошо знаю метод string.Format (). Однако в моем конкретном проекте, над которым я работаю, string.Format () мне не помогает (на самом деле он хуже, чем + concatenator).

Кроме того, я предполагаю, что большинство / все вы задаетесь вопросом, каков мотив моего вопроса (полагаю, я чувствовал бы то же самое, если бы я прочитал свой вопрос как есть).

Если вы один из любопытных, вот суть этого:

Я создаю веб-приложение, работающее на устройстве Windows CE. Благодаря тому, как работает веб-сервер, я создаю весь контент веб-страницы (css, js, html и т. Д.) В строковой переменной. Например, мой управляемый код .cs может иметь что-то вроде этого:

string GetPageData()
    {
    string title = "Hello";
    DateTime date = DateTime.Now;

    string html = @"
    <!DOCTYPE html PUBLIC ...>
    <html>
    <head>
        <title>$title</title>
    </head>
    <body>
    <div>Hello StackO</div>
    <div>The date is $date</div>
    </body>
    </html>
    ";

}

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

Ответы [ 13 ]

0 голосов
/ 12 апреля 2011

Нет, но вы можете создать метод расширения для экземпляра строки, чтобы сделать набор текста короче.

string s = "The date is {0}".Format(d);
0 голосов
/ 12 апреля 2011

или в сочетании:

Console.WriteLine("The date is {0}", DateTime.Now);

Дополнительная информация (в ответ на BrandonZeider ):

Да, людям очень важно понимать, что преобразование строк выполняется автоматически. Добавление ToString вручную не выполняется, например ::10000

string value = null;
Console.WriteLine("The value is '{0}'", value); // OK
Console.WriteLine("The value is '{0}'", value.ToString()); // FAILURE

Кроме того, это становится намного менее тривиальным, когда вы понимаете, что строковая не эквивалентна использованию .ToString () . У вас могут быть спецификаторы формата и даже пользовательские поставщики форматов ... Это достаточно интересно, чтобы научить людей использовать String.Format вместо того, чтобы делать это вручную.

0 голосов
/ 12 апреля 2011
string.Format("The date is {0}", DateTime.Now.ToString())
...