给定空投射:
var result = MyMethod( (Foo) null );
是否可以在方法中使用这些额外信息进行反射?
修改:
该方法的签名类似于:
object MyMethod( params object[] args )
{
// here I would like to see that args[0] is (was) of type Foo
}
答案 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 });
(静态方法的someInstance
为null
,而someType
是Type
方法的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) ......
}