gpt4 book ai didi

c# - 我可以将未知对象强制转换为接口(interface)以便我可以在 C# 中访问它的属性吗?

转载 作者:行者123 更新时间:2023-11-30 19:30:11 26 4
gpt4 key购买 nike

我尽量不重复代码,所以我有一个方法可以对接口(interface)的属性进行快速转换。

我有 3 个使用这个接口(interface)的具体类,我希望它们都能使用这个方法。

当我从 Session 中获取这些对象之一时,问题就来了。我看不到任何正确转换的方法。

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 的是任何一个具体对象:

Session["SelectedHeader"] = new ConcreteHeader() { Details = new List<ConcreteDetail>() };

最佳答案

你需要用括号括起你的转换:

details = ((IHeader<IDetail>)Session["SelectedHeader"]).Details;

关于c# - 我可以将未知对象强制转换为接口(interface)以便我可以在 C# 中访问它的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9823814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com