为什么这个String.Format操作抛出FormatException?

时间:2015-03-26 18:34:34

标签: c# .net

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

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

执行此操作时抛出FormatException:

String.Format(dpicker, "DatePicker");

实际问题是什么?

3 个答案:

答案 0 :(得分:8)

你需要逃避函数的大括号:

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

如此处所使用的,正确的方法是将它们加倍。请参阅Escaping Braces

string.Format方法的工作方式是查看整个字符串,逐个字符,并选择它们是属于“文字”类别,还是属于格式参数。一看到你的未转动的花括号,它就会理解为“我们现在正在格式化”,所以它首先寻找一个数字字符(当然,这不是花括号中唯一可接受的值,但是至少一个数字必须先出现,找不到一个,并抛出异常。

答案 1 :(得分:4)

String.Format试图将第一个{解释为占位符的开头,当然无法将$(\"#{0}\").datepicker();解析为某种数值。您可以通过{{}}转义格式字符串中的括号。所以这段代码应该有效:

string dpicker = "<script>$(function() {{ $(\"#{0}\").datepicker();}});</script>";
var s = String.Format(dpicker, "DatePicker");

答案 2 :(得分:2)

额外的花括号,使用双花括号{{}}来逃避它们:

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