【发布时间】:2014-01-09 07:06:01
【问题描述】:
我正在尝试“向上转换”一个实体。实体 B 只有几个属性。
实体:
public class A
{
public String Name { get; set; }
}
public class B : A
{
public String ForeName { get; set; }
}
我正在尝试以编程方式将 A.Name 的值转换为 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的实例并从中进行初始化?
标签: c# entity-framework reflection properties