为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]

Posted

技术标签:

【中文标题】为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]【英文标题】:Why can't I use the conditional operator in an interpolated string without brackets? [duplicate]为什么我不能在没有括号的插值字符串中使用条件运算符? [复制] 【发布时间】:2016-06-09 13:01:52 【问题描述】:

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

和错误:

如您所见,解析器似乎遇到了困难。这是一个bug,还是字符串插值机制的一个特性?

【问题讨论】:

【参考方案1】:

来自MSDN(强调我的):

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

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

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

【讨论】:

遗憾的是,它没有检测到: 左侧的? 运算符并提出了一个更好的错误,而不是五个:)

以上是关于为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C 在使用条件运算符时不允许连接字符串?

C# - 为啥我不能在字符串中使用三元运算符? [复制]

为啥 C 语言在 if 语句中需要围绕简单条件的括号?

为啥在java中不允许没有括号的赋值和布尔运算符

为啥 Go 没有三元条件运算符 [关闭]

为啥条件运算符不能正确地允许使用“null”来分配给可为空的类型? [复制]