[英]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
類型typeSelected
是Action<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.