为什么我不能在没有括号的插值字符串中使用条件运算符?

时间:2016-02-26 10:43:36

标签: c# c#-6.0 string-interpolation

为什么我不能在c#-6字符串插值中使用内联条件运算符,而不在括号内包含它?

enter image description here

和错误:

enter image description here

正如您所看到的,解析器似乎很难。这是一个错误,还是字符串插值机制的一个特性?

1 个答案:

答案 0 :(得分:4)

来自MSDN(强调我的):

$"{person.Name, 20} is {person.Age:D3} year {(p.Age == 1 ? "" : "s")} old."
     

您不需要在包含的插值表达式中引用引号字符,因为插值字符串表达式以$开头,并且编译器将包含的插值表达式扫描为平衡文本,直到找到逗号,冒号或关闭大括号。出于同样的原因,最后一个示例使用括号允许条件表达式(p.Age == 1 ? "" : "s")在插值表达式中,而冒号不会启动格式规范。在包含的插值表达式之外(但仍在插值字符串表达式中),您可以像往常一样转义引号字符。

如果没有括号,解析器会将冒号后面的部分视为format specifier(比较上面示例中的{person.Age:D3}部分)。