在启用了
nullable
的项目中考虑此方法:
public C? GetComponentOrNull<C>() where C : notnull;
其目的是
C
是不可为 null 的类型(无论是值类型还是不可为 null 的引用类型),但该函数返回该类型的可为 null 的版本。
但显然它并没有按照我想要的方式工作:
var component = GetComponentOrNull<int>();
if (component != null) {
// ...
}
我收到关于
null
比较的警告:
表达式的结果始终为“false”,因为“int”类型的值永远不等于 (CS0472)“int?”类型的“null”
将鼠标悬停在调用站点上显示推断的返回类型是
int
,而不是我预期的 int?
或 Nullable<int>
。
我尝试编写
Nullable<C>
作为返回类型,而不是 C?
,但随后出现错误:
类型“C”必须是不可为 null 的值类型,才能将其用作泛型类型或方法“Nullable”中的参数“T”(CS0453)
该怎么办?我可以按照我想要的方式写这个东西吗?
'?'对于类和结构类型有不同的含义,因此您必须分别对类和结构使用 2 个方法,例如
public C? GetComponentOrNull<C>() where C : class
和 where C : struct
。