2009-09-30 7 views
0

J'écris une application qui vérifie les conditions (c'est-à-dire si un booléen est vrai ou faux) mais qui peut prendre n'importe quel objet comme paramètre pour la fonction de HtmlControl.Passer un type générique (enfant de la classe abstraite) à une fonction

Mon func ressemble à ceci:

Func<HtmlControl, bool> func 

HtmlControl une classe de base pour tous les contrôles dans une API, que j'utilise (ArtOfTest WebAII).

J'ai une classe avec la structure suivante:

static class StartTest<T> where T : HtmlControl, new 
{ 

public static Manager Check (string Url, Func<T, bool> Condition) {} 

public static int Condition(Manager m, string element, Func<T, bool> func, T t) {} 
} 

J'utilise la nouvelle contrainte, car dans une collection, il y a une erreur que le type ne peut pas être abstraite quand je précise la nouvelle contrainte, que ne peut être que les types concrets et instanciés.

Je veux écrire quelque chose comme ceci:

Method1("Next parameter is a parameter to the func. If I don't write the cast, the compiler will think its the abstract HtmlControl class, right?", (HtmlImage) img => img.Alt.Length == 0); 

Cependant, cette erreur.

(La substance dans les marques de discours fait partie de cette question).

Lorsque j'écris la fonction d'une méthode en prenant un func comme paramètre, comment puis-je transmettre un type dérivé d'une classe abstraite?

La logique est appelée/consommée à partir d'un code de page Windows derrière. Je fais cette page générique comme ceci:

public partial class Window1<T> : Window where T : HtmlControl, new() 

Mais je reçois une erreur disant InitializeComponent n'existe pas dans le contexte actuel.

Répondre

2

(HtmlImage) img => img.Alt.Length == 0

Vous essayez de jeter toute l'expression lambda à HtmlImage ... Si vous souhaitez spécifier le type de paramètre d'expression lambda, faites-le comme ceci:

(HtmlImage img) => img.Alt.Length == 0 
Questions connexes