簡體   English   中英

在 C# 中將 object 轉換為 generics - InvalidCast 異常

[英]Casting object in generics in C# - InvalidCast Exception

我有一個我制作的通用 userControl,它給定一個類型 T(其中 T 是一個類),創建一個樹,其中包含在樹中實現 T 的所有類型(顯然用反射找到它們)。 樹工作正常,但是當我嘗試實現一個告訴我選擇了一個類型的事件時,我得到一個 InvalidCastException,或者我的 function 不起作用,無論我做什么。

function 是:

void TypeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
      if ((typeSelected != null) && (e.Node.Tag is T))
           typeSelected((T)e.Node.Tag)
}

e.Node.Tag中有一個 object 確實是T類型typeSelectedAction<T>類型

所以以這種方式, e.Node.Tag is T 在運行時為假,但當我對其設置 watch 時也是如此,如果我刪除條件我從(T)e.Node.Tag得到異常,盡管再次,手表成功鑄造它。

運行時的類型是RuntimeType ....

那么為什么會發生這種情況,我該如何解決呢?

如果 e.Node.Tag 的類型是 T 的派生類型,則可能會發生這種情況。如果是這種情況,您應該查看Variants & CoVariants

您尚未為 T 分配值。您必須將 T 的通用分配傳遞給方法簽名中的方法 - 而不是事件處理程序。

void TypeView_NodeMouseClick(object sender, TreeNodeMouseClickEvenArgs e)
{     
    DoWhateverAfterMouseClicked<string>(sender, e);    
}

public void DoWhateverAfterMouseClicked<T>(object sender, TreeNodeClickEventArgs e)
{    
           if ((typeSelected != null) && (e.Node.Tag is T))
                    typeSelected((T)e.Node.Tag);

}

暫無
暫無

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

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