J'ai la signature de la méthode suivante:Vérifier si un `object [] args` satisfait une instance Delegate?
public static void InvokeInFuture(Delegate method, params object[] args)
{
// ...
}
Le délégué et les arguments sont enregistrés dans une collection pour l'avenir d'invoquer.
Est-il possible de vérifier si le tableau d'arguments satisfait aux exigences des délégués sans l'invoquer?
Merci.
EDIT: Merci pour la mise en œuvre de la réflexion, mais je cherche un moyen intégré de le faire. Je ne veux pas réinvestir la roue, le .NET Framework a déjà cette vérification implémentée dans Delegate.DynamicInvoke() quelque part, une implémentation qui gère tous ces cas spéciaux fous que seuls les développeurs de Microsoft peuvent considérer, et qui ont passé Unit Testing et QA. Est-il possible d'utiliser cette implémentation intégrée?
Merci.
me devança, et vous avez eu un exemple de code! + 1 pour une réponse complète à sa question. –
Votre code ne gère pas l'héritage, par exemple un argument de type FileStream est un argument Stream valide. Votre code peut fonctionner, mais le fait est que CLR peut vérifier est lui-même dans le delegate.Invoke(). Y a-t-il un moyen de réutiliser le code de vérification du CLR? Je veux être entièrement cohérent avec le CLR. – DxCK
Note: vous ne devriez pas vérifier le type comme ceci, car cela retournera false pour les instances variantes (par exemple, un délégué acceptant 'object' retournera false si vous passez un' string' ou quoi que ce soit d'autre). Je suggérerais d'utiliser 'paramètres [i] .ParameterType.IsAssignableFrom (args [i] .GetType())' et d'ajouter des vérifications pour le type de valeur et 'null' (' args [i] .getType() 'va échouer si 'args [i]' est 'null'). – Lucero