Nullable.GetUnderlyingType(string)返回null
我认为这是因为string是一个引用类型,如果这对于内置类型的字符串不起作用,这是不行的吗?
要扩展我的问题, 如果你打电话
Nullable.GetUnderlyingType(int)
由于int不可为空而无法获得任何回报
如果你打电话
Nullable.GetUnderlyingType(int?)
返回结果,因为它是可以为空的类型
但是默认情况下字符串可以为空,因为它是引用类型,但也是内置类型,所以我期待
Nullable.GetUnderlyingType(string)
返回可以为空的东西
答案 0 :(得分:1)
因此,根据Nullable.GetUnderlyingType的MSDN,它的返回类型是:
" nullableType参数的类型参数,如果nullableType参数是封闭的通用可空类型;否则,为空。"
那么什么是封闭的通用可空类型?可以在Mehrdad(here)找到一个很好的解释。
从他的帖子:
"所有类型都可以分为开放类型或封闭类型。一个 open type是一种涉及类型参数的类型。更具体地说:
类型参数定义开放类型。数组类型是开放类型 当且仅当其元素类型是开放类型时。构造类型是 当且仅当一个或多个类型参数是a时,才打开一个类型 开放式。构造的嵌套类型是开放类型,当且仅当 一个或多个类型参数或其类型参数 包含类型是开放类型。封闭类型是一种类型 不是开放式的。"
举个例子:
已封闭的通用可空类型= List<string>
打开通用类型= List<T>
更新:
感谢Kiziu的评论和澄清,我已经更新了我的答案。
将返回null以外的值的唯一情况是 当类型是typeof(Nullable&lt;&gt;)时。 可空&LT;&GT;是一个结构,这意味着它不能继承。因此,由于字符串不是Nullable&lt;&gt;类型,因此它将返回null。数据类型如int?,double?属于Nullable的类型&lt;&gt;将返回其基础类型。