我试着这样做:
m_mystruct = (Form1.mystruct)m_myclass.mystruct;
其中两个结构具有相同的定义。
C#不想进行演员表。
更新:而不是为什么,我修改了我的问题
如何将结构从类传递给winform?
答案 0 :(得分:6)
具有“相同的定义”并不会使它们成为相同的类型。
事实上,如果有两个定义,那么它们是两种不同的类型。
答案 1 :(得分:3)
因为虽然定义相同,但它们没有任何关联。
如果您希望能够在两种类型之间进行投射,则必须定义explicit/implicit conversions。
答案 2 :(得分:2)
如果它们在两个不同的位置定义,那么它们实际上是两种不同的类型。
您可以定义显式和隐式运算符以在两者之间进行转换。它可能看起来像这样。
public struct Foo
{
public int Value;
public static explicit operator Bar(Foo source)
{
var destination = new Bar();
destination.Value = source.Value;
return destination;
}
}
public struct Bar
{
public int Value;
public static explicit operator Foo(Bar source)
{
var destination = new Foo();
destination.Value = source.Value;
return destination;
}
}
考虑一下你是否真的需要两个不同的声明。但是,除非你绝对没有其他选择,否则你决定不做以下事情。它可能会以多种不同的方式出错。
Foo f = new Foo();
IntPtr pf = Marshal.AllocHGlobal(Marshal.SizeOf(f));
Marshal.StructureToPtr(f, pf, false);
Bar b = (Bar)Marshal.PtrToStructure(pf, typeof(Bar));
Marshal.FreeHGlobal(pf);
或
unsafe
{
Foo f = new Foo();
Bar b = *(Bar*)&f;
}
答案 3 :(得分:0)
它们基本上是不同的类型!