我有一个控件列表(_controlList),从控件列表中我想得到从给定类派生的控件.所以我的代码看起来像这样.
List<Control> _controlList = new List<Control>();
public Control[] ControlsThatIsA(Type soughtType)
{
List<Control> result = new List<Control>();
foreach (Control control in _controlList)
{
// This would have been nice but doesn't compile
//////////////
// if (control.GetType() is soughtType)
{
result.Add(control);
}
}
return result.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗.我没有传入Type,它可能是类的字符串名称
首先,我可能会使用泛型:
public T[] ControlsOfType<T>() where T : Control
{
List<T> result = new List<T>();
foreach (Control control in _controlList)
{
if (control is T)
{
result.Add((T)control);
}
}
return result.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
或者在.NET 3.5中:
return _controlList.OfType<T>().ToArray();
Run Code Online (Sandbox Code Playgroud)
如果你需要使用Type,那么IsAssignableFrom特别是你的朋友:
if(soughtType.IsAssignableFrom(control.GetType())) {
//...
}
Run Code Online (Sandbox Code Playgroud)