当前位置: 首页 > 知识库问答 >
问题:

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

禹昊穹
2023-03-14

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

以及错误:

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

共有1个答案

逄俊贤
2023-03-14

来自MSDN(重点是我的):

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

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

如果没有括号,解析器将冒号后面的部分作为格式说明符(比较上面示例的{person.Age:D3}部分)。

 类似资料:
  • 我试图在插值字符串中使用条件操作符,但是因为它有一个冒号,编译器认为冒号后面是一个格式字符串。 我如何使用这种类型的语句?我唯一想到的事情是这样的:

  • 我在试着写作 但是我收到编译器错误 CS1003语法错误,':'预期 是期待行为还是bug?

  • 我想创建一个日期时间字符串,但添加CET/CEST,具体取决于是否夏时制。 因此,如果返回true,则附加“CEST”字符串,如果不是,则仅附加“CET”。 有没有简单/快捷的方法来做这件事?

  • 问题内容: 尝试编译时出现“不是语句”的编译错误,代码为: 当这些功能是: 有任何想法吗? 问题答案: 是的,您不能像这样使用条件运算符。其目的是计算一个或另一个 表达式 。它并不是要选择一个要执行的 语句 或另一条 语句 的方法。 只需使用:

  • 我一直在仔细阅读这篇SO文章,试图将花括号文字放在我的插值字符串周围。 我对的预期结果是“{foo}”。我曾尝试用反斜杠转义外部的花括号,但这不起作用,我也没想到会这样。我怎么才能在插入的字符串变量周围加上文字花括号?更准确的例子是: 预计:“我想吃一些{foo}。” 实际:“我想吃一些{testString}。” 我怎样才能做到这一点?(我还在和之间尝试了,但没有成功。)

  • 但是我发现我不能用围棋做同样的事情,我必须写一个if-else语句。我只是想知道为什么在围棋世界里不存在这种情况(是否有一些设计原则来解释这种情况)