Currently I am trying to extract a collection of dynamically created controls (checkboxes and dropdownlists) from a recursive control collection (repeater). This is the code I am using.
private void GetControlList<T>(ControlCollection controlCollection, ref List<T> resultCollection)
{
foreach (Control control in controlCollection)
{
if (control.GetType() == typeof(T))
resultCollection.Add((T)control);
if (control.HasControls())
GetControlList(controlCollection, ref resultCollection);
}
}
I am having problems with the following line:
resultCollection.Add((T)control);
I get the error ...
Cannot convert type 'System.Web.UI.Control' to 'T'
Any ideas?
Change it to
This will be faster than your cod, since it doesn't call
GetType()
.Note that it will also add controls that inherit
T
.You'll also need to constrain the type parameter by adding
where T : Control
.Problem:
Since
T
can be areference type
or avalue type
, compiler needs more information.You can not convert and
Integer
toControl
.Solution:
To fix this, add
where T : Control
orwhere T : class
(a more general) constraint to state thatT
will always be a reference type.Example:
ref
keyword. Since, List is a reference type, it's reference will be passed.