我有一个针对BusinessObject类的扩展方法:
public static class Extensions
{
public static T Clone<T>(this T obj)
where T: BusinessObject<T>, new()
{
T newObj = new T();
var props = newObj.Properties;
foreach (var p in props)
newObj.Properties[p.Name].SetValue(newObj, obj.Properties[p.Name].GetValue(obj));
return newObj;
}
}
那个方法的内容很棒,但是我有一个非泛型的BusinessObject类和一个泛型的对应类。我的很多代码都在非泛型变量中传递泛型对象的实例(请不要问我20个关于为什么的问题)。到目前为止,我还没有遇到问题,因为当我调用这个扩展方法时,它期望一个泛型版本。
调用Clone方法的代码使用了一个包含BusinessObject变量实例的BusinessObject变量。如何将变量转换为实际的类型?换句话说:
Customer cust = new Customer(); // Customer derives from BusinessObject<Customer>
var CustomerClone = cust.Clone(); // This works
BusinessObject obj = cust;
var clone = obj.Clone(); // This doesn't work
在这个例子中,我知道'obj'是一个客户端,但在我的实际方法中,我不知道它可能是任何数量的派生类型。我可以通过使用GetType()轻松地找出派生类型是什么,但如何在运行时将变量转换为该类型呢?
MemberwiseClone
的吗? - leppie