【发布时间】:2016-01-30 17:30:39
【问题描述】:
在开发我的简单 ORM 时,我需要用它的代理替换 POCO,因此我编写了一些方法来使用我的 ProxyBuilder 处理 POCO 列表,以创建扩展 POCO 并实现 IEntity 的代理,然后用新的代理重新分配 POCO 对象,但同时这样做,我在重新分配 POCO 列表中的项目后投射对象时遇到错误,它说'无法将'Order'类型的对象投射到'IEntity'类型
我用一些类简化了我的代码,如下所示:
public class Order
{
public string Code { get; set; }
public string Description { get; set; }
public DateTime Date { get; set; }
public decimal Total { get; set; }
}
interface IEntity
{
public long ID;
}
public class OrderProxy : Order, IEntity
{
// some functions of a proxy
}
然后使用这样的代码
public void Run()
{
Order order1 = new Order() { .... };
Order order2 = new Order() { .... };
List<Order> orders = new List<Order>();
items.Add(order1);
items.Add(order2);
Process<Order>(orders);
// ERROR occured here 'Unable to cast object of type 'Order' to type 'IEntity'
((IEntity)order1).ID= 1;
}
public void Process<T>(List<T> items)
{
for (int i = 0; i < items.Count; i++)
{
items[i] = (T)CreateProxy();
}
}
private object CreateProxy(object obj)
{
// my ProxyBuilder will create new instance of OrderProxy depend on passed POCO parameter then return it
return new OrderProxy();
}
我知道带有 T 的 List 是类,将通过引用传递,但在这种情况下,我不明白为什么它不能,列表变量 orders 处理后包含我想要的代理,但是order 实例仍然不是代理,我可能错过了什么吗?或者任何人帮助我改变我的代码中处理 List 的方式来获得这个,提前感谢
【问题讨论】:
-
@qxg 为什么该行会有异常?
-
@Thomas,我刚刚注意到
OrderProxy : Order。我错了。 -
@qxg 啊可以发生。你让我想知道是否有什么我不知道的。
-
@lLeQuangHoa 您是否修改了问题,使其现在变成了 2 个不同的问题? (“我在重新分配 POCO 列表中的项目后投射对象时遇到错误,它说'无法将'Order'类型的对象投射到'IEntity'类型”)。如果是这样,你有一个额外的问题不是直接源于第一个问题,你应该创建 2 个问题,因为其他所有问题都令人困惑。
-
为什么是对象类型的CreateProxy??????也许您应该使用通用方法。 private U CreateProxy
(T argument) where T : Order etc
标签: c#