我正在尝试将以下代码转换为GENERIC函数,因为无需对我的“控件比较”进行硬编码。任何方法来实现这一目标?:)
private Control getControlByAccessible(string accessDesc, string accessName, Control wrapper)
{
foreach (Control ctrl in wrapper.Controls)
{
if (ctrl is TextBox)
if (ctrl.AccessibleDescription == accessDesc && ctrl.AccessibleName == accessName)
return ctrl;
}
return null;
}
这是我的第一次尝试,到目前为止没有产生任何结果。
private Control getControlByAccessible(string accessDesc, string accessName, Control wrapper, Type aControlType)
{
foreach (Control ctrl in wrapper.Controls)
{
if (ctrl is aControlType)
if (ctrl.AccessibleDescription == accessDesc && ctrl.AccessibleName == accessName)
return ctrl;
}
return null;
}
答案 0 :(得分:8)
您可以使用Type.IsInstanceOfType
:
if (aControlType.IsInstanceOfType(ctrl))
但是,如果可能的话,我个人会使用类型参数使其成为真正的通用方法,然后使用LINQ的OfType
方法。我也可能把它作为一种扩展方法:
// This would need to be in a top-level non-generic class
public static T GetControlByAccessible<T>(this Control wrapper,
string description, string name) where T : Control
{
return wrapper.Controls
.OfType<T>()
.FirstOrDefault(c => c.AccessibleDescription == description &&
c.AccessibleName == name);
}
然后这样称呼:
TextBox tb = someContainer.GetControlByAccessible<TextBox>("name", "desc");