2010-11-15 6 views
1

Peut-être que je ne lis pas correctement la documentation de MSDN, mais étant donné une fonction qui accepte un paramètre de chaîne et renvoie le type T, comment cela peut-il être spécifié comme une fonction partagée en utilisant Func()? MSDN indique Func(Of In T1, Out TResult), mais tous leurs exemples utilisent le même type de données, c'est-à-dire Func(Of String, String). Je veux faire Func(Of In String, Out T), où T est arbitraire (mais je peux le contraindre si nécessaire par une classe de base). Je le veux partagé/statique au niveau de la classe, mais la classe d'encapsulation ne sera pas elle-même une classe générique. Il semble dans ce scénario spécifique, qu'il est impossible de faire ce que je veux parce que le compilateur n'aurait aucun moyen de savoir ce que le type T est à l'exécution.Comment spécifier les types génériques sur les délégués?

Est-il possible de faire des génériques sur les délégués ou des expressions lambda anonymes dans VB.net (pas C#)?

Répondre

2

On ne sait pas exactement ce que vous essayez de faire. Vous pouvez certainement utiliser des types de délégués génériques dans une méthode ou un type générique. A titre d'exemple trivial:

public T Convert<T>(Func<string, T> converter, string text) 
{ 
    return converter(text); 
} 

Cependant, vous ne pouvez pas le faire sans T étant un paramètre de type lui-même, soit spécifié dans la méthode générique ou le type.

+0

Vous l'avez sous la forme VB.net? En dépit d'être un peu instruit en C, je trouve difficile de lire C# pour une raison étrange. – Kumba

+0

Et oui, je devrais ajouter, encapsulé dans une méthode, je pourrais probablement faire ce que je veux. Je pense à quelque chose de plus similaire à la création d'un dictionnaire des délégués, par cette question ici: http://stackoverflow.com/questions/2550218/how-to-store-a-function-pointer-in-c – Kumba

+0

parce que j'essaie de trouver une meilleure façon d'éviter les grandes instructions 'Select Case ...' quand j'ai besoin de déterminer quel type est un objet à l'exécution. J'ai rencontré des références d'utilisation du polymorphisme pour faire cela au lieu de grands blocs conditionnels. La partie difficile est de trouver un exemple décent de tels. – Kumba