如何从泛型方法返回可为空的 T,其中 T : notnull?

问题描述 投票:0回答:1

在启用了

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)

该怎么办?我可以按照我想要的方式写这个东西吗?

c# generics nullable
1个回答
0
投票

'?'对于类和结构类型有不同的含义,因此您必须分别对类和结构使用 2 个方法,例如

public C? GetComponentOrNull<C>() where C : class
where C : struct

© www.soinside.com 2019 - 2024. All rights reserved.