簡體   English   中英

在C#中強制轉換為泛型類型失敗

[英]Casting to generic type fails in c#

我希望通過創建動態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”

有什么建議嗎?

嘗試添加通用約束:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM