相关疑难解决方法(0)

为什么我不能写Nullable <Nullable <int >>?

定义Nullable<T>是:

[SerializableAttribute]
public struct Nullable<T> where T : struct, new()
Run Code Online (Sandbox Code Playgroud)

约束where T : struct意味着T只能是值类型.所以我很清楚我不能写:

Nullable<string> a; //error. makes sense to me
Run Code Online (Sandbox Code Playgroud)

因为string是引用类型,而不是值类型.但我真的不明白为什么我不能写

Nullable<Nullable<int>> b; //error. but why?
Run Code Online (Sandbox Code Playgroud)

为什么不允许?毕竟,Nullable<int>是一个值类型,因此,它可以是类型参数Nullablle<T>.

当我在ideone上编译它时,它会给出这个错误(ideone):

错误CS0453:类型'int?' 必须是非可空值类型才能在泛型类型或方法'System.Nullable'中将其用作类型参数'T'编译失败:1个错误,0个警告

c# nullable value-type

11
推荐指数
2
解决办法
994
查看次数

Nullable <int?>是不可能的,为什么不呢?

对不起,如果它是一个愚蠢的问题,我试图更好地了解.Net中的Nullable类型.

从我注意到的微软源代码(使用ReSharper),我知道Nullable是一个结构,T需要是一个结构

public struct Nullable<T> where T : struct
Run Code Online (Sandbox Code Playgroud)

现在,我试着做这样的事情

public struct CustomNullable<T> where T : struct
{
}
public class CustomNullableClass<T> where T : struct
{
}
Run Code Online (Sandbox Code Playgroud)

我编译时遇到错误:

  Nullable<int?> a = null;
  Nullable<Nullable<int>> a1 = null;
Run Code Online (Sandbox Code Playgroud)

对于上面提到的代码,我得到一个错误'只有非可空值的类型可能是System.Nullable的基础',但是如何在Nullable类型中强制执行?

并为

   CustomNullable<int?> a2 = null;
   CustomNullableClass<int?> a3 = null;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误'类型System.Nullable必须是非可空的值类型才能将其用作参数T'.

我现在有点困惑,有人可以帮我理解发生了什么或者我不明白的东西?

非常感谢提前.

编辑:如果结构是值类型而值类型不能为null,那么Nullable如何成为结构?

信用:消费者

.net c# compiler-construction nullable internals

2
推荐指数
1
解决办法
216
查看次数