【发布时间】:2017-08-09 07:42:05
【问题描述】:
我有这段代码:
public void RepeaterListato_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
if (listType == "pages")
{
var item = (Pagina)e.Item.DataItem;
BuildFoto(e, item, IDCategoriaImmaginiPacchettoOfferta);
}
else if (listType == "schede")
{
var item = (Scheda)e.Item.DataItem;
BuildFoto(e, item, IDCategoriaImmaginiPacchettoOfferta);
}
else if (listType == "news")
{
var item = (New)e.Item.DataItem;
BuildFoto(e, item, IDCategoriaImmaginiPacchettoOfferta);
}
}
private void BuildFoto(RepeaterItemEventArgs e, dynamic item, string id)
{
var immagine = item.Immagini.Cast<Allegato>().Where(p => p.Categoria == id).FirstOrDefault();
if (immagine != null)
{
// ...
}
}
所以,由于listType的类型(在Page_Load解决),item发生了变化,所以我使用dynamic。但 LINQ 不适用于 Cast 和 Where 动态分派操作。
有解决方法吗?我应该在您的意见中使用Generics 吗?最好的方法?
【问题讨论】:
-
您能否提供一个显示问题的小型(完整)控制台应用程序,并与我们分享?这将使我们能够快速重现问题并为您提供一些解决方案。
-
Pagina、Scheda 和 New 是否继承自一个以 Immagini 作为属性的公共接口/基类? (如果为 true,item 参数可以是该类型,不需要动态)
-
它们都继承自一个名为
BrObject的类。但是在BrObject中没有Immagini作为属性。 -
@markzzz 你能添加一个带有 Immagini 属性的接口并让它们实现吗?
-
@vc74:不。它们来自我无法编辑的 DLL。