string.Format替代品

时间:2011-02-19 22:08:38

标签: c# string

我认为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>
");

与string.Format

相似
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 个答案:

答案 0 :(得分:2)

  

我希望有一些聪明而简单的方法。

不,这种非常缓慢而笨拙的方式:

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);
}

`

答案 1 :(得分:0)

实际上,我刚才对此进行了一些分析,事实是:你根本不会注意到这一点。即使在数百万次迭代中的紧密循环中,差异也很小。

有关信息虽然你可能想看一下razor,引擎接管并提前拆分(剃刀视图可以预先编译) - 在这种情况下它会像(不考虑js编码):

$('#@buttonName')...

或(替代):

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

最后一个选项是只针对一个类进行编码,只将类(在服务器上)添加到你想要的按钮 - 然后它是一个常量:

$('.some-class')...