如何获取通过泛型方法传递的对象类型以与foreach一起使用?

时间:2012-11-26 17:27:01

标签: c# generics foreach generic-method

使用以下代码,我试图传递'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();
        }
    }

2 个答案:

答案 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
}