我有TreeView
TreeNode
个TreeNode.Tag
种类型TreeNode.Tag
。
要指定struct
我使用数据aTreeNode.Tag = aStruct;
实例化StructOne
我有三种不同的结构StructTwo
,StructThree
和{{1} }。
因此TreeNode.Tag
可以是struct
这三种类型之一。我想根据switch
类型编写TreeNode.Tag
语句。
我不知道如何确定.Tag
的类型。我试过这个
if(aTreeNode.Tag is typeof(StructOne))
但我的IDE(MVS)告诉我“Type Expected”。 struct
在C#中没有类型吗?
我也认为这可以通过try{]catch{}
块实现,但我认为有一个更清洁的解决方案?
编辑:有关更多背景信息,.Tag
struct
会保存有关其所代表的表单的信息。因此,当用户点击TreeNode
时,我需要确定要打开的窗口类型,因此对于每个TreeNode.Tag
我会附加一些关于要打开的窗口的数据以及其他一些有关内容的信息。在窗口。但是我有三种不同类型的形式,并且低于其他子类型的形式。
答案 0 :(得分:1)
如果您不必使用结构并且可以使用类。我建议使用多态方法:
public interface ICanDoStuff
{
void DoStuff();
}
public class OnOfMyTagClasses : ICanDoStuff
{
public void DoStuff()
{
//Do some stuff
}
}
((ICanDoStuff)aTreeNode.Tag).DoStuff();
而不是使用switch-case。
答案 1 :(得分:1)
尝试以下方法:
if (aTreeNode.Tag is StructOne)
typeof(SOME_TYPE_NAME)
是运行时类型引用(类型为System.Type
)。