简体   繁体   English

在C#中强制转换为泛型类型失败

[英]Casting to generic type fails in c#

I'd wish to save some coding by being able to create a dynamic GetControl method. 我希望通过创建动态GetControl方法来节省一些编码。 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' 无法将类型“ System.Web.UI.Control”转换为“ 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 : 您可以通过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: 此外,如果仅出于自我说明的目的,我会将您的泛型类型限制为Web.UI.Control

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM