C# 为什么此String.Format操作引发FormatException?

C# 为什么此String.Format操作引发FormatException?,c#,.net,C#,.net,我为它创建了一个变通方法,但对以下字符串感到困惑: string dpicker = "<script>$(function() { $(\"#{0}\").datepicker();});</script>"; 实际问题是什么?您需要对函数的大括号进行转义: string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>"; //

我为它创建了一个变通方法,但对以下字符串感到困惑:

string dpicker = "<script>$(function() { $(\"#{0}\").datepicker();});</script>";

实际问题是什么?

您需要对函数的大括号进行转义:

string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>";
//                                     ^^                          ^^
string dpicker=“$(函数(){{$(\”{0}\”)。日期选择器();}}};”;
//                                     ^^                          ^^
这里使用的正确方法是将它们加倍。看


string.Format
方法的工作原理是逐个字符查看整个字符串,并选择它们是属于“literal”类别,还是属于格式参数类别。当它看到您的未替换的大括号时,它就理解了“我们正在格式化”的意思,因此它首先查找一个数字字符(当然,这不是大括号中唯一可接受的值,但至少必须先有一个数字),但找不到,并抛出异常。

String.Format
试图将第一个
{
解释为占位符的开头,当然无法将
$(\“{0}”)解析为某种数值。datepicker();
可以通过执行
{/code>和
}来转义格式字符串中的方括号
。因此此代码应该可以工作:

string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>";
var s = String.Format(dpicker, "DatePicker");
string dpicker=“$(函数(){{$(\”{0}\”)。日期选择器();}}};”;
var s=String.Format(dpicker,“日期选择器”);

对于多余的大括号,请使用双大括号对其进行转义
{{
}

string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>";
string dpicker=“$(函数(){{$(\”{0}\”)。日期选择器();}}};”;

我认为你必须通过放置两个大括号来避免格式字符串中的大括号。谢谢,@Zack,但你真的应该把它作为一个答案。我不能给你评论的代表分数,现在太晚了!我只是快速地将其作为评论输入,然后在Visual Studio中查看问题所在,等我得到bac时k、 已经有两个答案了!如果我不先确定它是否有效,我就不想给你答案了。@Zack,我以前也遇到过这种情况,所以我知道这个故事。无论如何感谢你的帮助!错误:无法识别的转义序列。
\}
\{
是无法识别的excape序列。这将无法编译。
string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>";