【发布时间】:2011-07-14 08:05:25
【问题描述】:
我有一个通用的 userControl,它给定一个类型 T(其中 T 是一个类),创建一个树,其中包含在树中实现 T 的所有类型(显然是通过反射找到它们)。 树工作正常,但是当我尝试实现一个告诉我选择了一个类型的事件时,我得到一个 InvalidCastException,或者我的函数不起作用,无论我做什么。
函数是:
void TypeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if ((typeSelected != null) && (e.Node.Tag is T))
typeSelected((T)e.Node.Tag)
}
在e.Node.Tag 中有一个真正属于T 类型的对象
typeSelected 的类型为 Action<T>
所以以这种方式,e.Node.Tag is T 在运行时为假,但当我对其设置 watch 时为真
另外,如果我删除条件,我会从(T)e.Node.Tag 获得异常,尽管手表再次成功投射它。
运行时的类型是RuntimeType....
那么为什么会发生这种情况,我该如何解决呢?
【问题讨论】:
-
请提供:(1)显示T如何声明的代码(2)确切的错误信息
-
我认为您需要提供将值分配给每个节点的 Tag 属性的代码。
标签: c# generics reflection .net