为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]
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
部分)。
【讨论】:
遗憾的是,它没有检测到:
左侧的?
运算符并提出了一个更好的错误,而不是五个:)以上是关于为啥我不能在没有括号的插值字符串中使用条件运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章