C# 可为null。GetUnderlyingType(字符串)返回null
可为null。GetUnderlyingType(字符串)返回null 我认为这是因为string是一种引用类型,但是对于内置类型,哪种string是 进一步说明我的问题,, 如果你打电话C# 可为null。GetUnderlyingType(字符串)返回null,c#,C#,可为null。GetUnderlyingType(字符串)返回null 我认为这是因为string是一种引用类型,但是对于内置类型,哪种string是 进一步说明我的问题,, 如果你打电话 Nullable.GetUnderlyingType(int) 因为int不可为null,所以不会返回任何内容 如果你打电话 Nullable.GetUnderlyingType(int?) 返回的结果是可为null的类型 但是字符串在默认情况下是可以为null的,因为它是引用类型,但也是内置类型,
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,是的,我做了,你是对的。非常感谢您的澄清,我将更新答案。