2012-11-26 48 views
0

下面的代碼我試圖通過'CachedModel模型',它有一個項目列表List<CachedModel.CachedModelItem>。然而,該foreach不喜歡'項目'。它也不喜歡Item.GetType()或類型myType = Item.GetType();的foreach(項目的myType ...如何獲取通過通用方法傳遞的對象的類型以便與foreach一起使用?

錯誤是:「類型或命名空間名稱‘項目’找不到(是否缺少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(); 
     } 
    } 
+3

目前還不清楚是什麼的'類型model.Items'是... –

回答

1

我不是100%肯定,但如果你是SA穎說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(); 
    } 
} 
+0

ICachedModelItem的作品,但它沒有定義,因此項目不包含「富」 – mtntrailrunner

+0

再投項目的定義屬性具有foo屬性的特定類型。 –

1

更重要的是,你不必知道。讓編譯器數字出來使用var關鍵字:

foreach (var item in model.Items) 
{ 
    // Do something 
} 

編輯:我不完全知道你是問什麼,但它可能是你正在尋找的.Cast或.OfType擴展方法來自LINQ。如果您確定列表中的所有項目實際上都是您提供的類型,請使用Cast。如果某些項目可能不匹配,請使用OfType。例如:

foreach (var item in model.Items.OfType<MyType>()) 
{ 
    // Do something 
} 
+0

var works,但ICachedModelItem沒有定義屬性,所以item不包含'foo'的定義 – mtntrailrunner

+0

您還沒有告訴我們該類型是什麼。 Your Items集合顯然是ICachedModelItem類型。如果這不是你需要的類型,你必須告訴我們(和編譯器)你真正想要的類型。 –

相關問題