Currently I am trying to extract a collection of dynamically created controls (checkboxes and dropdownlists) from a recursive control collection (repeater). This is the cod
Change it to
var c = control as T;
if (c != null)
resultCollection.Add(c);
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
.
Since T
can be a reference type
or a value type
, compiler needs more information.
You can not convert and Integer
to Control
.
To fix this, add where T : Control
or where T : class
(a more general) constraint to state that T
will always be a reference type.
private void GetControlList<T>(ControlCollection controlCollection, ref List<T> resultCollection)
where T : Control
{
foreach (Control control in controlCollection)
{
//if (control.GetType() == typeof(T))
if (control is T) // This is cleaner
resultCollection.Add((T)control);
if (control.HasControls())
GetControlList(control.Controls, ref resultCollection);
}
}
ref
keyword. Since, List is a reference type, it's reference will be passed.