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

时间:2011-09-01 12:01:37

标签: c# generics casting

我希望通过创建动态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.Control'转换为'T'

有任何建议吗?

2 个答案:

答案 0 :(得分:4)

尝试添加通用约束:

private T GetControl<T>(ASPxGridView control, string element) where T : Control
{
    var returnedElement = (T)control.FindEditFormTemplateControl(element);
    return returnedElement;
}

答案 1 :(得分:3)

您可以通过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);
}
相关问题