class 是什么意思? (class 带问号)在 C# 泛型类型约束中是什么意思?
What does class? (class with question mark) mean in a C# generic type constraint?
当我试图找到另一个问题的答案时,我注意到这段代码是用 C# 编译的:
public void Foo<T>(T obj)
where T : class?
{
}
我什至没能在文档中找到它的含义。
P.S。显然有人已经决定关闭一个问题,甚至没有弄清楚“重复”并没有真正联系起来。首先尝试弄清楚事情而不是结束问题真的很难吗?副本是关于可为空的原始类型,而可为空的引用类型则完全不同。除了有人看到他们都有一个问号并将问题标记为重复。
它强制 T 必须是可为 null 的引用类型。
您为 T 设置的类型必须派生自 object?
。
这是 C#8 中的一项新功能,可将类型显式声明为可为空。
如果你有
Add<T>(T tmp);
你的文档,添加null就可以了;
为了允许您的 class return null
值没有 CS864
警告,您可以稍微重写您的代码
public T? Foo<T>(T obj)
where T : class
{
return null;
}
关于 class?
的问题现在开放 GitHub issue。 class?
约束尚未实现,因此编译器像常规 class
一样威胁它并暂时生成 A null literal introduces a null value when 'T' is a non-nullable reference type
。
您还可以参考此 article 中的 T 问题? 部分以查看一些详细信息。上面的代码示例是处理可空泛型类型的推荐方法
当我试图找到另一个问题的答案时,我注意到这段代码是用 C# 编译的:
public void Foo<T>(T obj)
where T : class?
{
}
我什至没能在文档中找到它的含义。
P.S。显然有人已经决定关闭一个问题,甚至没有弄清楚“重复”并没有真正联系起来。首先尝试弄清楚事情而不是结束问题真的很难吗?副本是关于可为空的原始类型,而可为空的引用类型则完全不同。除了有人看到他们都有一个问号并将问题标记为重复。
它强制 T 必须是可为 null 的引用类型。
您为 T 设置的类型必须派生自 object?
。
这是 C#8 中的一项新功能,可将类型显式声明为可为空。 如果你有
Add<T>(T tmp);
你的文档,添加null就可以了;
为了允许您的 class return null
值没有 CS864
警告,您可以稍微重写您的代码
public T? Foo<T>(T obj)
where T : class
{
return null;
}
关于 class?
的问题现在开放 GitHub issue。 class?
约束尚未实现,因此编译器像常规 class
一样威胁它并暂时生成 A null literal introduces a null value when 'T' is a non-nullable reference type
。
您还可以参考此 article 中的 T 问题? 部分以查看一些详细信息。上面的代码示例是处理可空泛型类型的推荐方法