确定 C# 中当前值为 null 时的对象类型

本文关键字:null 对象 类型 确定 | 更新日期: 2023-09-27 18:37:05

没有更好的方法来确定对象的底层类型,即使对象的当前值为空?

当 someObject 确实是字符串类型但当前持有 null 值时,以下代码不起作用。

public void doWork(object someObject)
{
    var objAsString = someObject as string;
    if (objAsString != null)
    {
            // do work, return
            // work involves string specific logging/manupulation
    }
    var objAsByteArr = someObject as byte[];
    if (objAsByteArr != null)
    {
            // do work, return 
            // work involves byte specific logging/manupulation
    }
    throw new Exception("Unknown type encountered");
}

确定 C# 中当前值为 null 时的对象类型

没有办法做到这一点:null对象引用没有与之关联的类型。可以说,这无关紧要:处理碰巧null string与处理恰好null byte[]没有区别。

// Add this check upfront
if (someObject == null) {
    // do work for null, return
}
// Then continue with your existing code:
var objAsString = someObject as string;
if (objAsString != null)
{
    // do work, return
}
var objAsByteArr = someObject as byte[];
if (objAsByteArr != null)
{
    // do work, return 
}
throw new Exception("Unknown type encountered");

如果需要知道类型,则应手动传递类型,或使用泛型类型参数静态确定它(即在编译时)。