This question already has answers here:
Why can't I write Nullable<Nullable<int>>?
                                
                                    (5个答案)
                                
                        
                                5年前关闭。
            
                    
对不起,如果这是一个愚蠢的问题,我试图更好地理解.Net中的Nullable类型。

从我从Microsoft源代码(使用ReSharper)获得的信息中,我了解到Nullable是一个结构,而T必须是一个结构

public struct Nullable<T> where T : struct


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

public struct CustomNullable<T> where T : struct
{
}
public class CustomNullableClass<T> where T : struct
{
}


而且在编译时出现错误:

  Nullable<int?> a = null;
  Nullable<Nullable<int>> a1 = null;


对于上面提到的代码,我得到一个错误“ System.Nullable只能包含不可为null的值类型”,但是在Nullable类型中如何实现呢?

而对于

   CustomNullable<int?> a2 = null;
   CustomNullableClass<int?> a3 = null;


我收到错误消息“类型System.Nullable必须是不可为空的值类型,才能将其用作参数T”。

我现在有点困惑,有人可以帮助我了解发生了什么还是我不了解某些内容?

非常感谢。

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

贷方:支出者

最佳答案

实际上,这是C#编译器(猜测)中的内部漏洞。您不能在自己的类中复制它。如果使用完全相同的IL进行自己的类型输入,则不会强制执行该附加的隐藏约束。

关于c# - Nullable <int?>是不可能的,为什么不能呢? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24612399/

10-11 23:09
查看更多