我在字符串中定义了一个模板:
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)
我犯了什么错误?
答案 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 格式项。因此,您必须使用转义序列来显示 一个字面的开口支撑或关闭支撑。指定两个开口括号 (“{{”)在固定文本中显示一个左括号(“{”)或两个 关闭大括号(“}}”)以显示一个右大括号(“}”)。大括号 格式项按顺序依次解释 遇到。不支持解释嵌套大括号。