Что я могу использовать для получения шаблонов строк имен, выходящих за рамки String.Format? - PullRequest
1 голос
/ 08 марта 2012

Я работаю над задачей, которая требует большого количества манипуляций со строками, таких как:

string result = 
    String.Format("template text {0}, {1}, ... {150}", arg1, arg2, ... ,arg150);

Из-за большого количества аргументов это не выглядит элегантно, и я беспокоюсь оошибки в порядке аргументов.

Шаблоны стилей ASP.NET (т. е. template text <%= arg1 %>, <%= arg2 %>, было бы неплохо, но я не хочу делать веб-запрос к веб-серверу только для того, чтобы получить лучшие шаблоныдвигатель.

Есть ли лучший способ сделать это?

Ответы [ 4 ]

5 голосов
/ 08 марта 2012

Вы можете попробовать RazorEngine на основе Razor.

  string template = 
  @"<html>
      <head>
        <title>Hello @Model.Name</title>
      </head>
      <body>
        Email: @Html.TextBoxFor(m => m.Email)
      </body>
    </html>";

  var model = new PageModel { Name = "World", Email = "someone@somewhere.com" };
  string result = Razor.Parse(template, model);
3 голосов
/ 08 марта 2012

Современные C # 6 и более новые приложения

С появлением C # и String Interpolation первоначальные ответы на этот вопрос устарели. Строковая интерполяция по сути синтаксическая, чтобы сделать string.Format. Это позволяет вам размещать C # и переменные внутри строки. Синтаксис для запуска интерполяции строки состоит в том, чтобы поставить $ перед вашей строковой кавычкой, а затем все внутри фигурных скобок будет интерполировано. Ниже приведен пример, который вставит переменную myName в строку.

string myName= "Scott";
string text = $"Hello {myName}!";

Все это встроено в C # 6 и более новые приложения без отдельной загрузки или библиотеки / пакета.

Старый / устаревший ответ

Вы можете использовать сторонний шаблонизатор. Мой любимый на данный момент Усы из-за его простоты и реализации почти на каждом языке. Библиотека .NET для него: Nustache .

Синтаксис шаблонов выглядит следующим образом:

This is my template I will insert a {{mustache}} right there.

Вот пример кода для .NET.

using Nustache.Core;

string template = "This is my template I will insert a {{mustache}} right there.";
Dictionary<string, string> data = new Dictionary<string,string>();
data["mustache"] = "Beard";
string final = Render.StringToString(template, data));
0 голосов
/ 08 марта 2012

Я бы сказал, что если вы посмотрите на предоставленную вами строку:

"template text {0}, {1}, ... {150}"

и еще одну

template text <%= arg1 %>, <%= arg2 %>

, кроме символики (специфической для каждой технологии), они выглядят похожими.Так что я бы сказал, ваше решение уже хорошее, IMO.

Или вы можете использовать «заданные имена» в строке, как, например, мы делаем со строкой @parameter in SQL.Так что в самом параметре параметр вы будете иметь некоторое представление об аргументе.

0 голосов
/ 08 марта 2012

ЕСЛИ вы можете использовать текстовые шаблоны, вы можете поместить вашу строку в StringBuilder и затем заменить все вхождения шаблона на правильное значение.

...