目前我正在試圖設置一個字段,我需要在業務邏輯在這種情況下是懶惰內鑄造的對象。 (是不是財產,有必要設置字段) 我得到的錯誤是懶惰的,不能轉化爲懶惰 你可以看到:C#拉姆達
Object of type 'BusinessLogic.Lazy
1[System.Object]' cannot be converted to type 'BusinessLogic.Lazy
1[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返回的對象是什麼類型? – 2011-03-17 15:16:58
ArtikelBLL確實是GenericBLL的一個子類。由於存儲庫是動態的,因此GetDataById應返回存儲庫中的T的實體(本例中爲ArtikelBLL)。它不是面向對象的,因爲它在forloop中,並且存儲庫需要返回其他子類(例如,我有LieferantenBLL),如果我將它轉換爲ArtikelBLL,則會返回錯誤。該字段的類型是懶惰。 –
Stupidity
2011-03-17 15:30:27