這不是你遇到的鑄造問題。它是映射的問題。對於這種問題,使用AutoMapper(這是常見的問題,如果你用數據庫+ web服務基礎設施的工作,並且是常用的做法):
using System;
using AutoMapper;
public class Foo
{
public string A { get; set; }
public int B { get; set; }
}
public class Bar
{
public string A { get; set; }
public int B { get; set; }
}
public class Program
{
public static void Main()
{
Mapper.CreateMap<Foo,Bar>();
var foo = new Foo { A="test", B=100500 };
var bar = Mapper.Map<Bar>(foo);
Console.WriteLine("foo type is {0}", foo.GetType());
Console.WriteLine("bar type is {0}", bar.GetType());
Console.WriteLine("foo.A={0} foo.B={1}", foo.A, foo.B);
Console.WriteLine("bar.A={0} bar.B={1}", bar.A, bar.B);
}
}
PS
實際上,存在着一個小巧的黑客工具C#。通過對齊堆棧中的字段,可以將一個結構投射到另一個結構。這裏可以這樣做:
[StructLayout(LayoutKind.Explicit)]
public struct MyStructHack
{
[FieldOffset(0)]
public Foo a;
[FieldOffset(0)]
public Bar b;
}
public struct Foo { public int foo; }
public struct Bar { public int bar;}
var convert = new MyStructHack();
convert.a = new Foo {foo = 3};
var bar = convert.b;
Console.WriteLine(bar.bar);
請記住,在結構中有相同的字節順序是必要的。這個技巧通常使用,因爲它比做C#轉換更快。它只是跳過許多語言保護檢查。
它會_really_幫助您知道您的類看起來像 – maccettura
您可以在這裏定義類代碼嗎? – vipersassassin