确定TreeNode的标签类型;标签是各种结构体

本文关键字:标签 结构体 类型 TreeNode 确定 | 更新日期: 2023-09-27 18:03:37

我有一个TreeNodeTreeView与各种TreeNode.Tag类型。

要分配TreeNode.Tag,我用数据实例化struct,并执行aTreeNode.Tag = aStruct;,我有三个不同的结构StructOne, StructTwoStructThree

所以TreeNode.Tag可以是这三种类型的struct之一。我想写一个基于TreeNode.Tag类型的switch语句。

我不确定如何确定.Tag的类型。我已经试过了

if(aTreeNode.Tag is typeof(StructOne))

,但我的IDE (MVS)告诉我"类型预期"。struct在c#中没有类型吗?

我也认为这可以实现与try{]catch{}块,但我认为有一个更干净的解决方案?

编辑:为了了解更多背景信息,.Tag struct保存了它们所代表的表单的信息。因此,当用户点击TreeNode时,我需要确定要打开的窗口类型,因此对于每个TreeNode.Tag,我附加了一些关于要打开的窗口的数据以及关于窗口中内容的其他一些信息。但我有三种不同的形式,在这些形式下面还有其他子形式。

确定TreeNode的标签类型;标签是各种结构体

如果不必使用结构体,可以使用类。我建议使用多态性方法:

public interface ICanDoStuff
{
    void DoStuff();
}
public class OnOfMyTagClasses : ICanDoStuff
{
    public void DoStuff()
    {
      //Do some stuff
    }
}
((ICanDoStuff)aTreeNode.Tag).DoStuff();

尝试如下:

if (aTreeNode.Tag is StructOne)

typeof(SOME_TYPE_NAME)是一个运行时类型引用(类型为System.Type)