2009-05-20 8 views
1

donné une fonte nulle:Évaluez null casting avec réflexion?

var result = MyMethod((Foo) null); 

Est-il possible d'utiliser ces informations supplémentaires dans la méthode de la réflexion?

EDIT:
signature de la méthode est quelque chose comme:

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

Comment voulez-vous dire? –

+0

Qu'est-ce que vous voulez précisément utiliser et dans quelle méthode exacte? –

Répondre

2

Ahh ... vous avez modifié ...

je soupçonne le plus proche vous obtenez est générique:

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

(et de regarder typeof(T))

Mais cela suppose que tous les args sont les mêmes. Autre que ça; non. Chaque null est le même que tous les autres (Nullable<T> de côté), et vous ne pouvez pas dire le type de variable.


réponse originale:

Voulez-vous dire la résolution de surcharge?

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

(où someInstance est null pour les méthodes statiques et someType est le Type qui a la méthode MyMethod)

1

réponse courte: Non

Je devine que vous avez quelque chose comme ceci:

class Foo : Bar{} 

Depuis que vous avez:

object MyMethod(param object[] values); 

Il n'y a aucun moyen de le faire. Vous pouvez utiliser un modèle d'objet nul pour ce faire:

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

puis appelez avec Foo.Null au lieu de null. Votre MyMethod pourrait alors vérifier l'instance statique et agir en conséquence:

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

Merci pour le modèle d'objet nul - une autre idée. – tanascius