开发者

Casting to generic type fails in c#

I'd wish to 开发者_如何学运维save some coding by being able to create a dynamic GetControl method. My ideas is something like this

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

Which I call with

var myElement = GetControl<ASPxTextBox>(myGridView, "UserId");

But, this fails miserably:

Cannot convert type 'System.Web.UI.Control' to 'T'

Any advices?


Try adding a generic constraint:

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


You can circumvent type safety by casting via object:

var returnedElement = (T)(object)control.FindEditFormTemplateControl(element);

Furthermore, I would constrain your generic type to Web.UI.Control, if only for the purpose of self-documentation:

private T GetControl<T>(ASPxGridView control, string element)
    where T: System.Web.UI.Control
{
    return (T)control.FindEditFormTemplateControl(element);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜