C# 如何在带格式字符串的大括号之后转义插值字符串中的大括号?

C# 如何在带格式字符串的大括号之后转义插值字符串中的大括号?,c#,string-interpolation,C#,String Interpolation,以下崩溃: $"{{{DayOfWeek.Friday:d}}}" 如果我在第一个右括号后面加一个空格,它会起作用,但我不想在那里加空格 因此,有两个问题: 为什么它会崩溃,而不是将最后两个大括号作为文字大括号处理 我怎样才能做我想做的事 请看一下文档 例如,考虑格式项“{{{ 0:d}}}”。 要显示大括号,请使用十进制格式的数值 数字和右大括号。但是,格式项实际上是 按以下方式解释:前两个开口大括号 ({{”)被转义并产生一个开括号。接下来的三个 字符(“{0:”)被解释为格式项的开头 下

以下崩溃:

$"{{{DayOfWeek.Friday:d}}}"
如果我在第一个右括号后面加一个空格,它会起作用,但我不想在那里加空格

因此,有两个问题:

  • 为什么它会崩溃,而不是将最后两个大括号作为文字大括号处理
  • 我怎样才能做我想做的事
  • 请看一下文档

    例如,考虑格式项“{{{ 0:d}}}”。 要显示大括号,请使用十进制格式的数值 数字和右大括号。但是,格式项实际上是 按以下方式解释:前两个开口大括号 ({{”)被转义并产生一个开括号。接下来的三个 字符(“{0:”)被解释为格式项的开头 下一个字符(“D”)将被解释为十进制标准 数字格式说明符,但接下来的两个转义大括号(“}”)将产生 一个大括号。因为生成的字符串(“D}”)不是标准字符串 数字格式说明符,结果字符串被解释为 自定义格式字符串,表示显示文字字符串“D}”

    这正是您的情况,因此您得到的格式说明符不正确

    对于您的代码,您可以尝试使用旧的
    字符串。格式

    string.Format(“{0}{1:d}{2}”,“{”,DayOfWeek.Friday,“}”);
    
    请查看文档

    例如,考虑格式项“{{{ 0:d}}}”。 要显示大括号,请使用十进制格式的数值 数字和右大括号。但是,格式项实际上是 按以下方式解释:前两个开口大括号 ({{”)被转义并产生一个开括号。接下来的三个 字符(“{0:”)被解释为格式项的开头 下一个字符(“D”)将被解释为十进制标准 数字格式说明符,但接下来的两个转义大括号(“}”)将产生 一个大括号。因为生成的字符串(“D}”)不是标准字符串 数字格式说明符,结果字符串被解释为 自定义格式字符串,表示显示文字字符串“D}”

    这正是您的情况,因此您得到的格式说明符不正确

    对于您的代码,您可以尝试使用旧的
    字符串。格式

    string.Format(“{0}{1:d}{2}”,“{”,DayOfWeek.Friday,“}”);