ChatGPT解决这个技术问题 Extra ChatGPT

如何在插值字符串中使用三元运算符?

我对为什么这段代码无法编译感到困惑:

var result = $"{fieldName}{isDescending ? " desc" : string.Empty}";

如果我把它分开,它工作正常:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";

C
Community

根据documentation

内插字符串的结构如下: { [,][:] }

问题是冒号用于表示格式,例如:

Console.WriteLine($"The current hour is {hours:hh}")

解决方案是将条件括在括号中:

var result = $"Descending {(isDescending ? "yes" : "no")}";

当您需要使用嵌套插值字符串时,更有趣的示例是:Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
另一个例子,三元 if 在条件中使用字符串插值: var foo = $"{x.Title} {(!string.IsNullOrEmpty(x.SubTitle) ? $"({x.SubTitle})" : string.Empty)} ";
@Jan 即使您给出的示例也无法编译,但是 ReSharper 可以毫无问题地消除歧义(因为它知道提供代码修复)。
@MgSam 如果您告诉错误和您的开发设置会有所帮助。我使用 VS2019 和 VS2022 再次测试了我的示例(复制/粘贴),使用 .NET Core 2 到 .NET Core 6 以及 .NET 2 到 .NET 4.8。所有编译都很好(当然,如果您有一个具有 bool WeighAvailabledouble Weight 公共属性/属性的 Ship 类)。