我試圖不重複代碼,所以我有一個方法可以快速轉換接口的屬性。我可以將未知對象轉換爲接口,以便我可以在C#中訪問其屬性?
我有3個具體的類使用這個接口,我希望他們都能夠使用這種方法。
當我從會話中獲得其中一個對象時,就會出現問題。我沒有看到任何方法可以正確投射。
public ActionResult GetItems()
{
details = (IHeader<IDetail>)Session["SelectedHeader"].Details // Throws invalid cast
return Json(details);
}
// My interface and class examples:
interface IHeader<T> where T: IDetail
{
IList<T> Details { get; set; }
}
class ConcreteHeader : IHeader<ConcreteDetail>
{
public IList<ConcreteDetail> Items { get; set; }
}
class ConcreteDetail : IDetail
{
...
}
,因爲這是在ASP.NET MVC 3的操作方法(除非有一招給)我不能使用泛型。這是可能的,還是我必須爲每個班級編寫一個方法?
編輯:不知道這是從原來的問題清楚:
什麼進入會議是具體對象中的任何一個:
Session["SelectedHeader"] = new ConcreteHeader() { Details = new List<ConcreteDetail>() };
你'ConcreteHeader'不但是實現'IDetail',你有'T:IDetail'的通用約束。這甚至是如何編譯的? – 2012-03-22 14:05:13
@ m-y,不應該'ConcreteDetail'實現'IDetail'? – 2012-03-22 14:08:02
@Saeb是的,它的確如此。我可以澄清一下。 – IronicMuffin 2012-03-22 14:11:27