2009-05-20 2 views
1

Учитывая нулевой бросок:Оценить нулевой бросок с отражением?

var result = MyMethod((Foo) null); 

Можно ли использовать эту дополнительную информацию внутри метода с отражением?

EDIT:
подпись метода является что-то вроде:

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

Точно как вы имеете в виду? –

+0

Что именно вы хотите использовать и в каком точном методе? –

ответ

2

Ааа ... вы редактировали ...

Я подозреваю, что ближайший вы получаете дженерики:

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

(и посмотреть typeof(T))

Но это предполагает, что все args одинаковы. Кроме этого; нет. Каждый нуль совпадает с любым другим (Nullable<T>), и вы не можете указать тип переменной.


Оригинальный ответ:

ли вы имеете в виду разрешение перегрузки?

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

(где someInstance является null для статических методов и someType является Type, что имеет MyMethod метод)

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) ...... 
} 
+0

Спасибо за шаблон нулевого объекта - еще одна идея. – tanascius

Смежные вопросы