1

即使对象的当前值为空,是否有更好的方法来确定对象的基础类型?

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

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");
}
4

1 回答 1

3

没有办法做到这一点:null对象引用没有与之关联的类型。可以说,这应该无关紧要:处理 a stringthat恰好是null不应该不同于处理byte[]that恰好是null

// 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");

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

于 2013-10-27T16:33:47.923 回答