System.FormatException的字符串

时间:2013-07-31 14:28:13

标签: c# string.format formatexception

我收到System.FormatException:运行此方法时输入字符串的格式不正确。

字段的值:

arrayName = "requester";
fieldList = "\"name\" : \"shimshon\""; // "name" : "shimshon"


public override string ToString()
{
   var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList);

   return val;
}

该方法的预期结果是

"requester" : { "name" : "shimshon" }

这种格式有什么问题?

5 个答案:

答案 0 :(得分:7)

我想你想要:

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

注意加倍{{}}这是将大括号字面输入输出所需的转义序列。

答案 1 :(得分:1)

尝试

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

答案 2 :(得分:1)

变化:

public override string ToString()
{
    var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList);

    return val;
}

在:

public override string ToString()
{
   var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

   return val;
}
  

解释转义大括号的方式会导致意外结果。例如,   考虑格式项“{{{0:D}}}”,用于显示左括号,a   格式化为十进制数的数值和右括号。但是,格式   item实际上按以下方式解释:

  • 前两个开口大括号(“{{”)被转义并产生一个左大括号。

  • 接下来的三个字符(“{0:”)被解释为格式项的开头。

  • 下一个字符(“D”)将被解释为十进制标准数字格式说明符,但接下来的两个转义大括号(“}}”)会产生一个大括号。由于结果字符串(“D}”)不是标准数字格式说明符,因此结果字符串将被解释为自定义格式字符串,这意味着显示文字字符串“D}”。

  • 最后一个大括号(“}”)被解释为格式项的结尾。

  • 显示的最终结果是文字字符串“{D}”。将不显示要格式化的数值。

答案 3 :(得分:0)

您必须转义不属于格式的{}字符。

string.Format("\"{0}\" : {{ {1} }}",.....)

请参阅此MSDN页面:

http://msdn.microsoft.com/en-us/library/txafckwd.aspx

  

打开和关闭括号被解释为开始和结束a   格式项。因此,您必须使用转义序列来显示   一个字面的开口支撑或关闭支撑。指定两个开口括号   (“{{”)在固定文本中显示一个左括号(“{”)或两个   关闭大括号(“}}”)以显示一个右大括号(“}”)。大括号   格式项按顺序依次解释   遇到。不支持解释嵌套大括号。

答案 4 :(得分:0)

您需要使用双括号转义要在输出中使用大括号的花括号:

public override string ToString()
{
   var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

   return val;
}