GetType、typeof 和 is,处理 null 和转换 [重复]

Posted

技术标签:

【中文标题】GetType、typeof 和 is,处理 null 和转换 [重复]【英文标题】:GetType, typeof and is, to handle null and conversion [duplicate] 【发布时间】:2011-07-18 18:07:29 【问题描述】:

可能重复:Type Checking: typeof, GetType, or is?

以下有什么区别:

bool isLong (object a)
    return (a.GetType()==typeof(INT64));


bool isLong (object a)
    return (typeof(a)==typeof(INT64));


bool isLong (object a)
    return (a is INT64);

另外。有一个选项 a 将为空。这些函数可以处理这种情况吗?

( 我需要将“价值”转换为长吗?例如: c.CustomerId = (long?)value; )

我可以使用: 长的? id=(a as long?)

【问题讨论】:

你在发这个之前搜索过吗? @thecoop:我添加了一个关于 null 的问题。请看问题。 嗯,你有没有在测试项目中尝试过,看看行为是什么? 【参考方案1】:

第一个使用实例a,如果anull,则会抛出异常。它使用Type 类比较类型。

第二种方法行不通,因为typeof 仅适用于类型名称,不适用于实例。

在最后一种方式中,您说aINT64 类型。如果anull,它不会抛出异常。这是首选方法。

但是在你的情况下,你可以做的转换

c.CustomerId = value as long?;

【讨论】:

我可以使用:long 吗? id=(a as long?)? is 总是返回falsenull 绝对 - 如果它无法进行转换,它会将 null 粘贴到 id 中。

以上是关于GetType、typeof 和 is,处理 null 和转换 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

is vs typeof

比较对象类型时 typeof 和 is 有啥区别? [复制]

c#种GetType()和TypeOf()的区别

使用 GetType() 和 typeof() 获取 Type 有啥区别? [复制]

C# typeof 与GetType()的区别

如果 typeof(Xyz) 存在,为啥 System.Type.GetType("Xyz") 返回 null?