StringBuilder AppendFormat抛出IndexOutOfRangeException

时间:2016-09-19 18:29:38

标签: c# string stringbuilder

我在字符串中定义了一个模板:

public static string EntityClassBegginingTemplate =
    @"using System.Collections.Generic;

     //generated by the RuleDesigner
    public abstract class {0}Base : {1}
    {";

然后我尝试将其格式化为字符串:

builder.AppendFormat(Templates.EntityClassBegginingTemplate, entityName, baseClass);

该行引发异常:

  

IndexOutOfRangeException:数组索引超出范围。   System.String.FormatHelper(System.Text.StringBuilder结果,IFormatProvider提供程序,System.String格式,System.Object [] args)(在/ Users / builduser / buildslave / mono / build / mcs / class / corlib / System / String的.cs:1912)   System.Text.StringBuilder.AppendFormat(IFormatProvider提供程序,System.String格式,System.Object [] args)(在/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Text/StringBuilder.cs: 534)   System.Text.StringBuilder.AppendFormat(System.String format,System.Object arg0,System.Object arg1)(at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Text/StringBuilder.cs: 555)

我犯了什么错误?

1 个答案:

答案 0 :(得分:3)

我认为类模板的左大括号被解释为占位符。您需要转义任何您想要视为文字字符的花括号。

public static string EntityClassBegginingTemplate =
    @"using System.Collections.Generic;

     //generated by the RuleDesigner
    public abstract class {0}Base : {1}
    {"; <-- this is where the issue likely originated

正如Ed Plunkett所说,你使用双括号表示法{{as covered in the MSDN来逃避括号:

  

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