在c#中,转换为泛型类型失败
本文关键字:泛型类型 失败 转换 | 更新日期: 2023-09-27 18:07:18
我希望通过创建一个动态的GetControl方法来节省一些代码。我的想法是这样的
private T GetControl<T>(ASPxGridView control, string element)
{
var returnedElement = (T)control.FindEditFormTemplateControl(element);
return returnedElement;
}
我用
调用var myElement = GetControl<ASPxTextBox>(myGridView, "UserId");
但是,这失败了:
无法转换类型"System.Web.UI"。控制'到'T'
有什么建议吗?
尝试添加通用约束:
private T GetControl<T>(ASPxGridView control, string element) where T : Control
{
var returnedElement = (T)control.FindEditFormTemplateControl(element);
return returnedElement;
}
可以通过object
:
var returnedElement = (T)(object)control.FindEditFormTemplateControl(element);
此外,如果只是出于自我文档的目的,我会将泛型类型限制为Web.UI.Control
:
private T GetControl<T>(ASPxGridView control, string element)
where T: System.Web.UI.Control
{
return (T)control.FindEditFormTemplateControl(element);
}