C# 可为null。GetUnderlyingType(字符串)返回null

C# 可为null。GetUnderlyingType(字符串)返回null,c#,C#,可为null。GetUnderlyingType(字符串)返回null 我认为这是因为string是一种引用类型,但是对于内置类型,哪种string是 进一步说明我的问题,, 如果你打电话 Nullable.GetUnderlyingType(int) 因为int不可为null,所以不会返回任何内容 如果你打电话 Nullable.GetUnderlyingType(int?) 返回的结果是可为null的类型 但是字符串在默认情况下是可以为null的,因为它是引用类型,但也是内置类型,

可为null。GetUnderlyingType(字符串)返回null

我认为这是因为string是一种引用类型,但是对于内置类型,哪种string是

进一步说明我的问题,, 如果你打电话

Nullable.GetUnderlyingType(int) 
因为int不可为null,所以不会返回任何内容

如果你打电话

 Nullable.GetUnderlyingType(int?) 
返回的结果是可为null的类型

但是字符串在默认情况下是可以为null的,因为它是引用类型,但也是内置类型,所以我希望

Nullable.GetUnderlyingType(string) 
要返回可为null的内容

,根据for nullable.getunderyingtype,其返回类型为:

如果nullableType参数是封闭的泛型nullable类型,则为nullableType参数的类型参数;否则为null

那么什么是封闭的泛型可空类型呢?这里可以从Mehrdad()找到一个很好的解释

从他的职位:

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

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

举个例子:

关闭的泛型可空类型=
列表

打开泛型类型=
列表

更新:

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

返回非null值的唯一情况是 当类型为typeof(可为null)时。
Nullable是一个结构,这意味着它不能被继承。因此,由于字符串的类型不可为null,它将返回null。在哪里,像int?这样的数据类型是double?类型为Nullable的将返回其基础类型。

如果nullableType参数是封闭的泛型Nullable类型,则返回“nullableType参数的类型参数;否则返回null”。即使它“有效”,您希望它返回什么?
字符串的“底层”类型是什么?如果
T
null
T
为引用类型,则可以编写返回
T
的方法,但
getUnderlineType
不是一个好名称。请发布,我不想猜测你所说的伪代码实际上是什么意思。该方法的行为与文档中描述的完全一样。我不明白你的问题。你到底在问什么?
如果它是List类型,它将返回string类型
不是true。请看这里:。该方法所做的是检查type是否实现了
Nullable
List
没有。MSDN上的描述不够准确,而且对短语nullable type的描述过于自由。@Kiziu不是所有类型参数为nullable的对象吗?我假设
中带有类型参数的对象是指封闭的泛型类型。不,他们不是
Nullable
是一个结构,这意味着它不能被继承。@Kiziu,是的,我做了,你是对的。非常感谢您的澄清,我将更新答案。