字符串插值、字符串格式化和空合并运算符

String interpolation, string formatting and null coalescing operator at once

提问人:ISquared 提问时间:11/9/2023 更新时间:11/9/2023 访问量:81

问:

我需要这个: 如果以下格式化值为 null,则显示 N/A。否则,显示格式化值。它需要使用字符串插值。我尝试做一些类似嵌套插值的事情:

$"{$"({someValue:N0})" ?? "N/A" }"

但结果只是空字符串。 使用 .NET 7。

C# .NET 字符串格式化字符串 插值

评论

3赞 madreflection 11/9/2023
字符串插值永远不会产生,因此该部分完全是多余的。null?? "N/A"
0赞 ISquared 11/9/2023
谢谢,我想这是有道理的。您能否建议另一种方法将字符串格式化为 ??还是完全不在桌面上?
1赞 Ed'ka 11/9/2023
不带插值的替代方法:someValue?.ToString("N0") ?? "N/A"
0赞 Ed'ka 11/9/2023
@madreflection 好吧,从技术上讲,自定义字符串插值处理程序可以做任何事情,包括返回null
1赞 madreflection 11/9/2023
@Ed'ka:边缘情况。从技术上讲,你是对的,因为它可以产生 null,就像你可以用 将不可为 null 的字符串设置为 null 一样,但我想说的是,任何产生 null 的插值字符串处理程序都会被破坏,因为它没有插值到实例。在 BCL 中实现的插值字符串处理程序不会产生 .!nullstringnull

答:

0赞 MediocreFantasy 11/9/2023 #1

我相信你在这里的问题是$“({someValue:N0})”永远不会计算为null,因为{}之外的()。我在这里要做的是:

(someValue == null ? "N/A" : $"({someValue:N0})"

这本质上是一个内联 if/else 语句,其中 前面的部分是条件,第一个字符串(在 之前)是条件为 true 时得到的,第二个字符串是条件为 false 时得到的。?: