2008-11-12 7 views
3
public class Item 
{ 
     private int _rowID; 
     private Guid _itemGUID; 

     public Item() { } 

     public int Rid 
     { 
      get 
      { 
       return _rowID; 
      } 
      set { } 

     } 

     public Guid IetmGuid 
     { 
      get 
      { 
       return _itemGuid; 
      } 
      set 
      { 
       _itemGuid= value; 
      } 

     } 

}  

위의 내 사용자 지정 개체입니다. V 형 항목, 내 목적이다일반 목록 반복 C#

List<V> myList = someMethod; 

:

나는 목록을 가지고있다.

나는 반복하고 내가 디버깅과 나는 '간략한'의 모든 속성을 볼 수 있지만 내가 element.IetmGuid을 할 수없는 '요소'개체를 볼 때 같은

foreach(V element in mylist) 
{ 
    Guid test = element.IetmGuid; 
} 

같은 속성을 얻으려면 .

+0

왜 "ItemGuid.set"emtpy가 있습니까? 그것은 매우 나쁜 디자인으로 보입니다. – TcKs

+0

element.letmGuid를 수행 할 수 없다는 것은 무엇을 의미합니까? 무슨 일이야? –

+0

내가 얻는 오류는 V가 IetmGuid에 대한 정의를 가지고 있지 않다. –

답변

1
foreach(object element in myList) { 
    Item itm = element as Item; 
    if (null == itm) { continue; } 
    Guid test = itm.ItemGuid; 
} 
1

귀하의 목록은 다음과 같이 선언한다 :

V가 입력 항목입니다
List<V> myList = someMethod; 

.

다음 반복은 정확했다 :

List<Item> myList = someMethod; 
+0

, 나는 그것이 목록으로 선언해야합니까 으로 myList = 것으로 someMethod 내가 오류가 V는 내가 런타임에 속성을 결정하고 싶은 V가 선언되지 않은 추측 IetmGuid 에 대한 정의를 포함하지 않는 것입니다 런타임까지 –

3

이 같은 목록을 선언하려고? V는 Item 유형의 하위 유형 인 모든 유형이 될 수 있음을 런타임에 알려줘야합니다.

public class MyGenericClass<V> 
    where V : Item //This is a constraint that requires type V to be an Item (or subtype) 
{ 
    public void DoSomething() 
    { 
    List<V> myList = someMethod(); 

    foreach (V element in myList) 
    { 
     //This will now work because you've constrained the generic type V 
     Guid test = element.IetmGuid; 
    } 
    } 
} 

주, 그것은 단지 당신이 (항목의 서브 타입으로 표현) 항목의 여러 가지를 지원해야하는 경우 감각이 방법으로 일반적인 클래스를 사용할 수 있습니다.

+0

+1, 나는 그가 클래스라고 불리는 때 그가 V를 사용하는 이유를 모르겠다. – Kon

+0

fallen888 : Items 또는 User 개체 목록을 만들 수 있어야합니다. 둘 다 저장된 procs로 채워지고 각각에 대한 기본 테이블에는 IetmGuid가 있습니다. 따라서 실행 시간에 따라 List 또는 List 을 수행 할 수 있으며 List 을 선택할 수 있습니다. 여기서 V는 항목/사용자에 대해 런타임에 결정됩니다 –

+0

하지만 사용자가 항목 또는 항목 사용자? 그들이 공통 인터페이스를 공유한다면 당신은 그것을 깨뜨릴 수 있습니다. – Will

5

당신이 제네릭 형식 V에 제약을 가하고 있습니다 :

foreach(V element in myList) 
{ 
    Guid test = element.IetmGuid; 
} 
+0

내가 이랬어 public class MygenericClass 어디 V : new() –

+0

그건 단지 타입 V는 매개 변수가없는 생성자가 필요합니다. 제네릭 형식 V를 항상 Item (또는 하위 형식)으로 사용하려면 위에 표시된대로 형식을 제한해야합니다. – akmad

+0

akmad : 항상 매개 변수없는 생성자가있는 V 유형이 필요하다고 말하십시오. 내 접근 방식이 효과가 있니? –