Мой первый вопрос: можно ли указать общий тип как параметр, во-вторых, возможно ли что-нибудь вроде псевдо-кода ive, перечисленного ниже?Общий тип как параметр
Предполагаю, что он будет использовать .net 4.0 и модификатор динамики, но меня больше интересует решение до 4.0.
public static void SomeMethod(List<T> l, Type type, Control samplecontrol)
{
l.Add((type)samplecontrol);
}
Edit:
Вот мое решение ...
public static void FindControlRecursive<T>(Control parent, List<T> l)
{
foreach (var ctrl in parent.Controls)
{
if (ctrl.GetType() == typeof(T))
l.Add((T)ctrl);
if (((Control)ctrl).Controls != null && ((Control)ctrl).Controls.Count > 0)
foreach (Control _ctrl in ((Control)ctrl).Controls)
FindControlRecursive<T>(_ctrl, l);
}
}
Глядя на этом сравнении: 'ctrl.GetType() == TypeOf (T) '- вы уверены, что это то, что вы на самом деле хотите? Если вы проходите, например. 'ButtonBase' как' T', он не будет соответствовать 'Button' или' CheckBox' (которые оба выводятся из 'ButtonBase'). Возможно, вы хотите, чтобы вместо 'ctrl был T'? Кроме того, вам не нужно создавать в 'Add ((T) ctrl)' и все '(Control) ctrl', если вы пишете' foreach (Control ctrl ...) ', а не' foreach (var ctrol .. .) '- проблема с последним заключается в том, что коллекция' Controls' не является общей, поэтому 'var' выводится на' object.' –