【发布时间】:2011-03-17 15:09:17
【问题描述】:
我目前正在尝试在业务逻辑中设置一个我需要的字段,在这种情况下是 Lazy。 (是的不是属性,需要设置字段) 我收到 Lazy 无法转换为 Lazy 的错误 如您所见:
对象类型 'BusinessLogic.Lazy
1[System.Object]' cannot be converted to type 'BusinessLogic.Lazy1[BusinessLogic.ArtikelBLL]
我使用这一行来获取动态存储库。
dynamic repository = Activator.CreateInstance(typeof(GenericRepository<>).MakeGenericType(typeArgs));
然后我尝试设置字段的值但失败:
fInfo.SetValue(obj, Lazy.From(() => repository.GetDataById(id)));
我尝试了很多不同的方法来解决它。
不知何故,我必须将repository.GetDataById(id) 转换为它正在寻找的实体,在这种情况下是 ArtikelBLL(我可以通过pInfo.PropertyType)。
但是通过(ArtikelBLL)repository.GetDataById(id),它不会保持面向对象。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
您可以提供一些信息以获得更好的答案:如果您写了
(ArtikelBLL)repository.GetDataById(id),为什么它不再是面向对象的?字段的类型是什么?GenericBLL和ArtikelBLL之间有什么关系(我猜后者是前者的子类,但你可以澄清一下)? GetDataById 返回的对象是什么类型? -
ArtikelBLL 确实是 GenericBLL 的子类。因为存储库是动态的,GetDataById 应该返回 Repository
中的 T 实体(在本例中为 ArtikelBLL)。它不是面向对象的,因为它位于 forloop 中,并且存储库也需要返回其他子类(例如我有 LieferantenBLL),如果我将其转换为 ArtikelBLL,它将返回错误。该字段的类型是 Lazy 。
标签: c# dynamic lambda lazy-evaluation func