我在一个工程中定义了一个结构,并建了一个对象,我通过反射调用另一个DLL中的窗体,并将结构值放到窗体的Tag属性中,在新窗体中,我又新定义了一个同样的结构,并从Tag属性中取出值来进行转换,却转换失败,怎么会这样,如果出现这种情况,我该怎么转换啊?

解决方案 »

  1.   

    属于不同的名空间,就属于不同的类型,不能转换.像这种情况,可以定义把类型定义成全局可见的,或是写成DLL在不同的项目中引用以使名称空间及程序集信息保持一致.
      

  2.   

    lz: "在新窗体中,我又新定义了一个同样的结构.......",为什么又要定义一个这个结构呢?在不同的命名空间里,即使同样名字的结构机或类,系统认为是完全不同的类型!!!你把原来的dll引用过来不就行了!!!!
      

  3.   

    唉,最早的这个结构定义在以前工程的一个DLL中,新建的工程就只用到了结构的定义,其它都用不着,如果加进来感觉没有必要,所以想强制转换一下,唉,C++就没有这样的问题,难道没有别的办法,只能引用进来吗?
      

  4.   

    重载类型转化运算符:
    static public explicit operator Struct1(Struct2 s)
    {
    //.....
    }
      

  5.   

    To:owennol:
        兄弟,如果我能使用Struct2,也就没必要强制类型转换了。似乎不太好实现啊
      

  6.   

    To:Jinglecat
    我知道对C#来说包括命名空间完整的限定名 才是 类的 完整身份证号
    但我还是不明白,到底能不能把别的地方定义的我知道其成员的类或结构对象,强制转换成本地一个重新定义的,具有相同成员函数的对象,C++是肯定没问题,C#到底行不行