StringBuilder AppendFormat throws IndexOutOfRangeException
本文关键字:IndexOutOfRangeException throws AppendFormat StringBuilder | 更新日期: 2023-09-27 18:07:49
我有一个模板定义在一个字符串:
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: Array index out of range。System.String.FormatHelper (text。StringBuilder result, IFormatProvider provider, System。字符串格式,System。Object[] args) (at/Users/builduser/buildslave/mono/build/mcs/class/corlib/System/String.cs:1912)System. text . stringbuilder . appendformat ()字符串格式,System。Object[] args) (at/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Text/StringBuilder.cs:534)System.Text.StringBuilder.AppendFormat(系统。字符串格式,System。对象arg0, System。对象arg1) (at/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Text/StringBuilder.cs:555)
我犯了什么错误?
我假设类模板的前花括号被解释为占位符。您需要转义任何您希望作为文字字符处理的花括号。
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所指出的,您可以使用双括号符号{{
来转义大括号,如MSDN中所述:
左括号和右括号被解释为a的开始和结束格式项。因此,必须使用转义序列来显示字面上的开始大括号或结束大括号。指定两个大括号("{{")在固定文本中显示一个或两个左括号("{")右括号("}}")显示一个右括号("}")。中的大括号格式项按其所在的顺序依次解释遇到。不支持解释嵌套大括号。