在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'

有什么建议吗?

在c#中,转换为泛型类型失败

尝试添加通用约束:

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);
}