2012-11-26 4 views
0

다음 코드를 사용하여 아이템 목록이있는 'CachedModel model'을 전달하려고합니다. List<CachedModel.CachedModelItem>. 그러나 foreach는 'Item'을 좋아하지 않습니다. 또한 Item.GetType() 또는 Type 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에'에 대한 정의를 포함하지 않는 정의 속성이 없습니다 foo 속성을 가진 특정 유형 –

1

더 중요한 것은, 당신이 알 필요가 없습니다. var 키워드로 컴파일러 그림 그것을 보자

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

편집 : 나는 당신이 요구하는지 전혀 모르겠어요,하지만 당신이 .Cast 또는 .OfType 확장 방법을 찾고 있다고 할 수있다 LINQ에서. 목록에있는 모든 항목이 실제로 제공하는 유형인지 확실하면 전송을 사용하십시오. 일부 항목이 일치하지 않을 경우 OfType을 사용하십시오. 예를 들어 :

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

var하지만 ICachedModelItem에 정의 된 속성이 없습니다. 따라서 항목에 'foo'에 대한 정의가 없습니다. – mtntrailrunner

+0

유형이 실제로 무엇인지 알려주지 않았습니다. Items 컬렉션의 유형이 ICachedModelItem입니다. 필요한 유형이 아닌 경우 실제로 원하는 유형을 Google에 알려 주어야합니다 (및 컴파일러). –