在启用nullable
的项目中考虑此方法:
public C? GetComponentOrNull<C>() where C : notnull;
目的是C
是一个不可为空的类型(无论是值类型,还是不可为空的引用类型),但函数返回该类型的可为空版本.
但很明显这并不像我想要的那样:
var component = GetComponentOrNull<int>();
if (component != null) {
// ...
}
我在null
个比较中得到了一个警告:
表达式的结果总是'false',因为类型'int'的值永远不等于类型(CS0472)'int?"
将鼠标悬停在调用站点上,显示推断的返回类型是int
,而不是我预期的int?
或Nullable<int>
.
我试着将返回类型写成Nullable<C>
,而不是C?
,但后来我得到了一个错误:
类型'C'必须是不可空值类型,才能将其用作泛型类型或方法'Nullable'中的参数'T'(CS0453)
怎么办?我能按我想的方式写吗?