Оценить нулевой бросок с отражением? - PullRequest
1 голос
/ 20 мая 2009

При нулевом приведении:

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
}

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

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

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

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 голос
/ 20 мая 2009

Краткий ответ: Нет

Полагаю, у вас есть что-то вроде этого:

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) ......
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...