在C#6.0中混淆String Interpolation

Bab*_*rQB 0 c# c#-6.0

我有这个内联变量的代码 { (hour > 12 ? "PM" : "AM") }

我创建它并且它可以工作,但我感到困惑,因为没有括号()我有一些问题,代码大量的红色下划线,感染编译器代码建议重构它与红色下划线但在包装后我的表达式()工作.

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

WriteLine($"{hour}:{minout}:{seconds} { (hour > 12 ? "PM" : "AM") }");
Run Code Online (Sandbox Code Playgroud)

Fab*_*bio 5

: operator是字符串格式的有效运算符,用于字符串插值

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

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

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

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

var dayPart = date.Hours > 12 ? "evening" : "morning";
var stringDate = $"It is {dayPart}";
Run Code Online (Sandbox Code Playgroud)