string.Format альтернативы - PullRequest
       2

string.Format альтернативы

1 голос
/ 20 февраля 2011

Я думаю, что дословные (многострочные) строки в C # - действительно отличная идея.Я использовал для копирования SQL из / в код, сводя к минимуму ошибки опечаток.На самом деле мне нужно отрендерить некоторый javascript, и я ударился о стену.

Потребность в двойных кавычках можно частично избежать, используя апострофы в javascript, но в случае, если вам нужны строки форматирования, вы также должны избегать фигурных скобок:

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, @"
<script type=""text/javascript"">
 $(document).ready(function() {
  $('#my_button').click(function() {
   alert('Handler for .click() called.');
  });
 });
</script>
");

выглядит как со строкой. Формат

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, string.Format(@"
<script type=""text/javascript"">
 $(document).ready(function() {{
  $('#{0}').click(function() {{
   alert('Handler for .click() called.');
  }});
 }});
</script>
"), buttonName);

Я не хочу ставить под угрозу скорость выполнения форматирования, просто чтобы облегчить жизнь при кодировании с использованием некоторой предварительной обработки строки форматирования.Я надеюсь, что есть какой-то умный и простой способ.Просто не хочу изобретать велосипед ...

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

Я надеюсь, что есть какой-нибудь умный и простой способ.

Нет, просто этот невероятно медленный и клункий способ:

EscapeCurlies(String Input)
{
    String Temp = Input.Replace("{", "{{");
    Temp = Temp.Replace("}", "}}");

    Temp = Regex.Replace(Temp, @"{{(\d+)}}", "{$1}");

    return Temp;
}

protected void Button1_Click(object sender, EventArgs e)
{
    String buttonName = "bob";

    String FormatString = 
@"<script type=""text/javascript"">
$(document).ready(function() {
$('#{0}').click(function() {
alert('Handler for .click() called.');
});
});
</script>";

    String Test = string.Format(EscapeCurlies(FormatString), buttonName);
}

`

0 голосов
/ 20 февраля 2011

На самом деле, я некоторое время назад профилировал это, и правда в том, что вы этого вообще не заметите. Даже в тесных циклах за миллионы итераций разница была небольшой.

Для информации, хотя вам может понадобиться взглянуть на бритву, где движок захватывает и разделяет ее заранее (виды бритвы могут быть предварительно скомпилированы) - в этом случае это будет что-то вроде (не учитывая кодировку js):

$('#@buttonName')...

Или (альтернатива):

$('#@(buttonName)')...

Последний вариант - просто кодировать класс и добавлять класс (на сервере) к нужной кнопке - тогда это константа:

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