代码之家  ›  专栏  ›  技术社区  ›  Lord Darth Vader

可为空。GetUnderlyingType(字符串)返回空值

c#
  •  0
  • Lord Darth Vader  · 技术社区  · 7 年前

    可为空。GetUnderlyingType(字符串)返回空值

    我认为这是因为string是一个引用类型,但是对于string是什么的内置类型这不应该有效吗?

    在我的问题上, 如果你打电话

    Nullable.GetUnderlyingType(int) 
    

    你什么也得不到因为int不能为空

    如果你打电话

     Nullable.GetUnderlyingType(int?) 
    

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

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

    Nullable.GetUnderlyingType(string) 
    

    把某物归为空

    1 回复  |  直到 7 年前
        1
  •  1
  •   A.sharif    7 年前

    所以根据 MSDN 对于nullable.getunderyingtype,其返回类型为:

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

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

    在他的岗位上:

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

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

    举个例子:

    封闭的泛型可空类型= List<string>

    打开泛型类型= List<T>

    更新:

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

    Nullable.GetUnderlyingType

    返回空值以外的值的唯一情况是 当类型为TypeOf(可为空)时。 可空<gt;是一个结构,这意味着它不能继承。因此,由于字符串的类型不可为空,因此它将返回空值。像int这样的数据类型在哪里?双?可为空类型的将返回其基础类型。