Nullable.GetUnderlyingType(string)返回null

时间:2018-06-14 13:37:00

标签: c#

Nullable.GetUnderlyingType(string)返回null

我认为这是因为string是一个引用类型,如果这对于内置类型的字符串不起作用,这是不行的吗?

要扩展我的问题, 如果你打电话

Nullable.GetUnderlyingType(int) 

由于int不可为空而无法获得任何回报

如果你打电话

 Nullable.GetUnderlyingType(int?) 

返回结果,因为它是可以为空的类型

但是默认情况下字符串可以为空,因为它是引用类型,但也是内置类型,所以我期待

Nullable.GetUnderlyingType(string) 

返回可以为空的东西

1 个答案:

答案 0 :(得分:1)

因此,根据Nullable.GetUnderlyingType的MSDN,它的返回类型是:

" nullableType参数的类型参数,如果nullableType参数是封闭的通用可空类型;否则,为空。"

那么什么是封闭的通用可空类型?可以在Mehrdad(here)找到一个很好的解释。

从他的帖子:

  

"所有类型都可以分为开放类型或封闭类型。一个   open type是一种涉及类型参数的类型。更具体地说:

     

类型参数定义开放类型。数组类型是开放类型   当且仅当其元素类型是开放类型时。构造类型是   当且仅当一个或多个类型参数是a时,才打开一个类型   开放式。构造的嵌套类型是开放类型,当且仅当   一个或多个类型参数或其类型参数   包含类型是开放类型。封闭类型是一种类型   不是开放式的。"

举个例子:

已封闭的通用可空类型= List<string>

打开通用类型= List<T>

更新:

感谢Kiziu的评论和澄清,我已经更新了我的答案。

Nullable.GetUnderlyingType

将返回null以外的值的唯一情况是 当类型是typeof(Nullable&lt;&gt;)时。 可空&LT;&GT;是一个结构,这意味着它不能继承。因此,由于字符串不是Nullable&lt;&gt;类型,因此它将返回null。数据类型如int?,double?属于Nullable的类型&lt;&gt;将返回其基础类型。