我試圖「向上」一個實體。實體B只有幾個propeties。Refelection將屬性轉換爲另一個實例
實體:
public class A
{
public String Name { get; set; }
}
public class B : A
{
public String ForeName { get; set; }
}
我想A.Name價值CONVER到B.Name編程。 從來就寫了一個小功能的話:
public static T Upcast<T>(Type typeOf, Object obj) where T : new()
{
var target = new T();
var props = obj.GetType().GetProperties();
var targetProps = target.GetType().GetProperties();
foreach (var prop in props)
{
foreach (var tp in targetProps)
{
if (prop.Name.Equals(tp.Name))
{
var val = prop.GetValue(props, null);
tp.SetValue(null, val, null);
}
}
}
return target;
}
在這種情況下:我的目標是B類和我obj爲A類
但是,在第二循環中觸發一個例外:
var val = prop.GetValue(props, null);
異常「對象與目標類型不匹配」。
我呼籲正常方式功能:
static void Main(string[] args)
{
var a = new A {Name = "Smith"};
var resp = Upcast<B>(a.GetType(), a);
Console.ReadLine();
}
只是出於好奇:你爲什麼要通過反射來做到這一點,而不是在'B'中有一個構造函數,它需要'A'的一個實例並從中初始化? –