Nullable <T>如何使用它的底层值类型扩展方法

gdo*_*ica 4 .net c# enums nullable

一个小时前我问了一个问题:我怎么能写一个扩展方法,Enum?-Nullable<Enum>
令人惊讶的是我得到了一个答案,告诉我我可以编写扩展方法Enum,它可以用于所有枚举和可空的枚举.

很酷,它工作,但如何?

如果我理解正确的话,所有的枚举都源自于Enum这就是为什么我可以在我拥有的每个枚举中使用这个扩展方法.

但是...... ItemType?例如,枚举不是一个枚举,它Nullable<ItemType>不是来自ItemType也不是Enum.
就像List<DataReader>不派生DataReader而不能使用DataReader方法一样,虽然DataReader它是通用类型.

我知道这个Nullable<T>类型有很多"伏都教"和句法糖,这是其中之一吗?

Dan*_*iel 5

扩展方法不需要类/派生/,它们只需要存在转换(更具体地说:隐式标识,引用或装箱转换;这是§7.6.5.2"扩展方法调用").

转换Nullable<ItemType>System.Enum是拳击转换; 与从一个转换Nullable<int>System.Object.

如果您定义了自己的结构struct Test : IMyInterface {},那么将会转换Nullable<Test>IMyInterface.

如果nullable为null,则来自nullables的boxing转换将返回null引用; 并以其他方式包装可空的值.有关详细信息,请参阅C#规范中的§6.1.7"Boxing conversions".