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

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

和错误:

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

【问题讨论】:

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


    【解决方案1】:

    来自MSDN(强调我的):

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

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

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

    【讨论】:

    • 遗憾的是,它没有检测到: 左侧的? 运算符并提出了一个更好的错误,而不是五个:)
    猜你喜欢
    • 2017-09-06
    • 2019-04-01
    • 2021-02-22
    • 1970-01-01
    • 2016-02-02
    • 2016-12-30
    • 1970-01-01
    • 2020-11-22
    • 2015-10-28
    相关资源
    最近更新 更多