【发布时间】:2021-11-18 10:32:04
【问题描述】:
我有一个interface<T>。这个接口有一个方法Compare(T x, T y)。
-
x永远不能是null。 -
y很有可能成为null。
我想通过在y 上使用空条件运算符? 来明确这一点:Compare(T x, T? y)。
这可能吗?来自哪个版本的 C#?
编辑:
T可以是引用类型和值类型。
【问题讨论】:
-
这不是空条件运算符。
T?指定一个可为空的类型。对于值类型,它会生成一个Nullable<T>参数。对于引用类型,它什么也不做,因为它们已经可以为空。在 C# 8 及更高版本中,假设启用了可空类型检查,T将永远不会接受空值,而T?会。你试过了吗?你有遇到什么问题吗? -
T 是引用类型吗?是的,那么你不能保证“x 永远不能为空”,所以这是一个错误的陈述。如果它是一个值类型,请参阅 Panagiotis 评论。
T(例如int)和Nullable<T>(例如int?)是不同的类型 -
在 C# 8 及更高版本中,您可以让编译器确保在使用 Nullable Reference Types 时
T不会接受任何空值。这只适用于您的代码和编译时支持 NRT 的库(BCL 支持它们)。 -
关于 Nullable 引用类型的文章——特别是关于泛型的文章——回答了我的问题。谢谢@PanagiotisKanavos!
标签: c# generics null-conditional-operator