使用以下代码,我试图传递'CachedModel model',其中包含项List<CachedModel.CachedModelItem>
列表。然而,foreach不喜欢'Item'。它也不像Item.GetType()或Type myType = Item.GetType(); foreach(myType项目......
错误是:“找不到类型或命名空间名称'Item'(您是否缺少using指令或程序集引用?)”
有什么想法吗?
呼叫:
FillCache<CachedModel.CachedModelItem>(model, CachedEntitiesID);
方法:
public void FillCache<cachedModelItem>(ICachedModel model, int CachedEntitiesID)
where cachedModelItem: ICachedModelItem, new()
{
ICachedModelItem Item = new cachedModelItem();
foreach (Item item in model.Items)
{
string foo = item.foo.ToString();
}
}
答案 0 :(得分:1)
我不是百分百肯定,但如果您说Item
类型为ICachedModelItem
,请尝试将方法更改为:
public void FillCache<cachedModelItem>(ICachedModel model, int CachedEntitiesID)
where cachedModelItem: ICachedModelItem, new()
{
foreach (ICachedModelItem item in model.Items)
{
string foo = item.foo.ToString();
}
}
答案 1 :(得分:1)
更重要的是,你不必知道。让编译器使用var关键字来计算出来:
foreach (var item in model.Items)
{
// Do something
}
编辑:我不完全确定你在问什么,但可能是你在寻找LINQ的.Cast或.OfType扩展方法。如果您确定列表中的所有项目实际上都是您提供的类型,请使用Cast。如果某些项目可能不匹配,请使用OfType。例如:
foreach (var item in model.Items.OfType<MyType>())
{
// Do something
}