用反射评估null cast?

时间:2009-05-20 12:20:05

标签: c# reflection null-cast

给定空投射:

var result = MyMethod( (Foo) null );

是否可以在方法中使用这些额外信息进行反射?

修改:
该方法的签名类似于:

object MyMethod( params object[] args )
{
  // here I would like to see that args[0] is (was) of type Foo
}

2 个答案:

答案 0 :(得分:2)

啊......你编辑过......

我怀疑你得到的最接近的是泛型:

object MyMethod<T>( params T[] args ) {...}

(并查看typeof(T)

但是假设所有args都相同。除此之外;没有。每个null都与其他null相同(Nullable<T>除外),你无法告诉变量类型。


原始回复:

你的意思是重载决议?

object result = someType.GetMethod("MyMethod",
        new Type[] { typeof(Foo) })
        .Invoke(someInstance, new object[] { null });

(静态方法的someInstancenull,而someTypeType方法的MyMethod

答案 1 :(得分:1)

简答:否

我猜你有这样的事情:

class Foo : Bar{}

因为你有:

object MyMethod(param object[] values);

没有办法做到这一点。您可以使用null对象模式来完成此任务:

class Foo : Bar
{
 public static readonly Foo Null=new Foo();
}

然后使用 Foo.Null 而不是null来调用。然后,您的MyMethod可以检查静态实例并采取相应措施:

object MyMethod(param object[] values
{
 if(values[0]==Foo.Null) ......
}