获取null对象的基本类型Userx=null;对象o=x;//仅通过引用o和泛型来确定类型不起作用想象一下,您有一个库。假设您还有一盒卡片,每本书一张卡片。(年轻的读者:实际上曾经有这样的系统的图书馆,在计算机淘汰它们之前。)现在想象你有两个托盘。一个托盘标有“科幻小说”,另一个标有“任何书”。顺丰托盘是空的。您告诉您的助理图书管理员“倾倒任何托盘中的所有内容,然后复制SF托盘中的所有内容,并将副本放入任何托盘中”。任何托盘倾倒后,它就变空了,由于SF托盘是空的,所以不需要复印,所以任何托盘都是空的。现在与您的问题类似的是“任何托盘中的这本书是什么类型的书?”答案是“没有这种类型,因为任何托盘都是空的”。这不像SF托盘是空的,并且以某种方式“感染”任何托盘,使其“空但有SF气味”。那有意义吗?变量只是存储位置;空引用是对“这根本不引用任何东西”的引用,并且没有任何“不引用任何东西”的味道。有关此差异的更多信息,请参阅我关于该主题的文章:http://blogs.msdn.com/b/ericlippert/archive/2009/10/29/i-have-a-fit-but-a-lack-of-focus.aspxo是一个空引用(注意这里的措辞;它是一个空引用,而不是对空对象的引用)。这些引用没有不同类型。因此,您无法确定最初分配了空值的变量的类型。我不认为你能做到这一点。Object.GetType()方法当然不适用于null,而Type.GetType方法需要一个名称或句柄,因此它们也不起作用。你到底需要什么?可能还有另一种方法可以实现您的目标。Null不是对象。Null不是实例。Null只是用于清除引用变量并使其引用“无处”的语言语法。你无法获得“null”的类型,就像你无法描述“无处”的样子一样。null是一个可以分配给不同类型的值。在您的问题示例中,x是User类型,而o是object类型。因此,您可以编译Uriu=o但不能编译Uriu=x。在运行时,前者也可以工作,因为Uri允许空值,但该对象不是空值,而是一个User对象,由于无法将值转换为Uri而出错。null表示“此值不是对内存中对象的引用”。无论对象是什么类型,内存中都没有对象。即使您在问题中将它大写,泛型也不会起作用。泛型适用于类型,而不是值。Enumerable.Repeat(x,3)将返回一个包含3个空项的IEnumerable,而Enumerable.Repeat(o,3)将返回一个包含3个空项的IEnumerable。不同类型的枚举表明泛型在这里可以完美地工作。以上就是C#学习教程:获取null对象基本类型分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
