How to use the ternary operator inside an interpolated string?
我不明白为什么这段代码不能编译:
1
| var result = $"{fieldName}{isDescending ?" desc" : string.Empty}"; |
如果我把它分开,它会很好地工作:
1 2
| var desc = isDescending ?" desc" : string.Empty;
var result = $"{fieldName}{desc}"; |
- 这是比尔·瓦格纳的一篇很好的文章,详细解释了这个问题。
- @Petrichor,处理请求时出错。
- @Sinatr更新链接:thebillwagner.com/blog/item/…
- @Natebarbettini不错。如果可以的话,我会更新我的评论。
- 这同样适用于命名空间别名限定符(::)。
- @Uwekeim有趣!
按:《文档
The structure of an interpolated string is as follows:
$"{ }"
问题是,结肠是denote格式,样
1
| Console.WriteLine($"Time in hours is {hours:hh}") |
那么,答案是:TL;博士在parenthesis WRAP的条件。
1
| var result = $"descending? {(isDescending ?"yes" :"no")}"; |
- 具有讽刺意味的是,我最终还是把这句话拆开了,这样读起来更容易。但是,我想有人可能会在某个时候(可能是我自己)被这件事弄糊涂。
- 更具讽刺意味的是,当您忘记使用括号时,Visual Studio会在冒号下加下划线,并显示错误"需要冒号"。:)
- 这个问题甚至更好,因为您不仅要回答显式问题,而且还要回答下面的隐式问题:什么是解决方法。
- 如果一切看起来都正常,但没有,注意括号的顺序。像WriteLogLine($"{( ... })")这样的表达式显然会产生一个错误,但是很难发现它。
- 我读了所有这些,看到了TL;博士,我并不后悔:)
- 哇,简单的括号解决了这个问题:$"my text {(exp?"string1":"string2")}"。我认为最好的方法是将条件exp从插值中去掉,将字符串值赋给变量,然后在插值中显示变量。
- @狱卒是的,答案就是这样说的!
- 很好,我最后做了这个$"doco.filename"(doco.version>0?$"v doco.version",")",[插值[条件]]
- 我发现这对于SQL字符串中的条件WHERE语句非常有用。尤其是与多行运算符@-$@"select*from m where 1=1(something?"blah=@blah":")