2009-05-20 94 views
1

鑑於空鑄:用反射評估空投射?

var result = MyMethod((Foo) null); 

是否有可能使用與反射的方法內這些額外的信息?

編輯:
方法的簽名是這樣的:

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

您的確切含義是什麼意思? – 2009-05-20 12:21:32

+0

你想要使用什麼和確切的方法? – 2009-05-20 12:21:42

回答

2

啊...你...編輯

我懷疑你會得到最接近的是仿製藥:

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

(並看看typeof(T)

但是,假設所有args是相同的。除此之外;沒有。每一個null都是相同的(拋開Nullable<T>),並且你不能告訴變量類型。


原件回覆:

你的意思是重載?

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

(其中someInstancenull靜態方法,並someType是具有MyMethod方法Type

1

簡短的回答:沒有

我猜你有這樣的事情:

class Foo : Bar{} 

既然您得到了:

object MyMethod(param object[] values); 

沒有辦法做到這一點。你可以使用空對象模式來實現:

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

,然後用Foo.Null代替空調用。您的MyMethod然後可以檢查靜態實例並採取相應的措施:

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