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

对 C# 6.0 中的字符串内插感到困惑 [重复]

终祯
2023-03-14

我有这段代码,其中这个内联变量 { (小时)

我创建了它,它可以工作,但我很困惑,因为没有大括号(),我的代码有很多红色下划线,感染了编译器的代码建议,用红色下划线重构它,但用包装我的表达式后,它就可以工作了。

我只想知道()在这个插值内联变量中的状态是什么?

WriteLine($"{hour}:{minout}:{seconds} { (hour > 12 ? "PM" : "AM") }");

共有2个答案

刘狐若
2023-03-14
匿名用户

那里的括号表示一个表达式,首先需要对其求值,然后其结果将是内插字符串的输入。

有关正式方法,请查看以下链接

表达式,并在本文档中搜索术语带括号的表达式。

关于插值字符串,你可以在这里找到更多信息。然而,你必须记住的一件事是它的结构:

$"<text> {<interpolated-expression> [,<field-width>] [<:format-string>] } <text> ..."

在您的情况下,< code >(...)是插值表达式。

益锦程
2023-03-14

运算符是字符串插值中使用的字符串格式的有效运算符

var date = new DateTime(2017, 8, 31);
var stringDate = $"Date is {date:yyyy.MM.dd}"; // "Date is 2017.08.31"

没有括号被视为格式字符串,但不是条件运算符,因此要使用条件运算符,您应该用括号包装条件表达式。

var stringDate = $"It is {(date.Hours > 12 ? "evening" : "morning")}";

另一种方法(可能更可读)在格式化结果之前执行所有表达式

var dayPart = date.Hours > 12 ? "evening" : "morning";
var stringDate = $"It is {dayPart}";
 类似资料:
  • 按照我在C语言中的理解,char *x等于字符串x中第一个字符的地址。在下面的代码示例中,当我在调试器中运行程序时,l和m的值总是相同的地址,并且条件语句为真: 我不明白为什么这两个变量总是有相同的值(地址)

  • 问题内容: 我知道“ ==”比较引用,并且Java字符串是不可变的,并且使用字符串池缓存,但是在这个示例上我仍然感到困惑: 这给了我结果: 我仍然很困惑为什么System.out.println(name1 == name2); 给我一个错误,因为我知道两个值都应该缓存在字符串池中? 问题答案: 因为是final并使用文字字符串初始化,所以它是一个常量表达式。 所以指令 编译为 编译成 因此,在字

  • 我正在尝试提出一种解决方案,它涉及在连接操作之后应用一些逻辑,从多个中的中选择一个事件。这类似于reduce函数,但它只返回1个元素,而不是递增地返回。因此最终结果将是单个(,对,而不是一个 每个键保证只到达一次。 假设像上面这样的连接操作,它用4个生成了1个,成功地连接并收集在。现在,我想做的是,立即访问这些值,并执行一些逻辑以将正确匹配到一个。例如,对于上面的数据集,我需要(,和)。 将为每个

  • 所以我一直在读Kafka的语义学,我对它的工作原理有点困惑。 我理解生产者如何避免发送重复的消息(以防代理的ack失败),但我不明白的是,在消费者处理消息但在提交偏移量之前崩溃的情况下,一次是如何工作的。Kafka不会在这种情况下重试吗?

  • 问题内容: 我已经在eclipse中创建了一个项目,并添加了Maven依赖项。在Eclipse中,它表示我正在使用JRE 1.5。一切在Eclipse中都可以正常运行,例如,我可以运行测试。 当我尝试从终端运行时,出现以下错误。 …在-source 1.3中不支持泛型(使用-source 5或更高版本来启用泛型)… 看来,Maven认为我正在使用JRE 1.3,并且无法识别泛型或for-each循

  • 问题内容: 在碰到此链接http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using- executors-and-threadpoolexecutor 之后,这是我第一次为新项目使用Java线程池。 .html ,我对此更加困惑,这是页面中的代码, 在代码中,创建了一个固定大小的池并创建了10个工作线程,对吗? 线程池应该