I am writing an application which checks for conditions (ie if a bool is true or false) but it can take any object as a parameter to the func, which derives from HtmlControl.
My func looks like this:
Func<HtmlControl, bool> func
HtmlControl is a base class for all controls in an API, which I use (ArtOfTest WebAII).
I have a class with the following structure:
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) {}
}
I am using the new constraint because in a collection, there is an error that the type cannot be abstract so when I specify the new constraint, that can only be the concrete, instantiated types.
I want to write something like this:
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);
However, this errors.
(The stuff in speech marks is part of this question).
When I write the func for a method taking a func as a parameter, how can I pass in a derived type of an abstract class?
The logic is called/consumed from a Windows page codebehind. I make that page generic like so:
public partial class Window1<T> : Window where T : HtmlControl, new()
But I get an error saying InitializeComponent does not exist in the current context.
You’re trying to cast the whole lambda expression to HtmlImage… If you want to specify the type of the lambda expression parameter, do it like this :