2012-02-15 3 views
0

내 클래스의 인스턴스를 포함하는 사용자 지정 컬렉션을 구현하고 싶습니다.속성 이름을 사용하여 사용자 지정 컬렉션 속성에 액세스하는 방법

이것은 내 수업으로 여기서 약간 단순화되었습니다.

public class Property : IComparable<Property> 
{ 
    public string Name; 
    public string Value; 
    public string Group; 
    public string Id; 
    ... 
    ... 

    public int CompareTo(Property other) 
    { 
     return Name.CompareTo(other.Name); 
    } 
} 

은 내가 속성을 반복하거나 인덱스 위치를 통해 특정 속성에 액세스 할 수있는 목록 모음

Public List<Property> properties; 

에 속성의 인스턴스를 추가하고있다.

나는 그러나 그것의 이름 등이

var myColor = properties["Color"].Value; 

하여 속성에 액세스 할 수 있도록하려면 나는이 작업을 수행 할 수있는 효율적인 방법이 없습니다. 이를 달성하기 위해 속성을 사용자 지정 목록 컬렉션 클래스로 작성해야한다고 가정합니다. 누구든지 볼 수있는 코드 샘플이 있습니까?

도움 주셔서 감사합니다. 이 목적을 위해

Dictionary<string, Property> properties = new Dictionary<string, Property>(); 

//you add it like that: 
properties[prop.Name] = prop; 

//then access it like that: 
var myColor = properties["Color"]; 
+0

여전히 인덱스를 사용하여 액세스 할 수 있도록 하시겠습니까? 또는 이름으로 액세스 권한이 충분합니까? – SWeko

+0

이름으로 액세스하고 컬렉션을 통해 반복하는 것은 인덱스로 개체에 액세스하는 것보다 더 일반적입니다. – MWS

답변

1

가장 쉬운 방법은 이미 언급했지만, 저는 두를 참조하십시오

방법 1 사전에 변환 및 조회가.

var props = properties.ToDictionary(x => x.Name); 
Property prop = props["some name"]; 

방법 2 은 임의의 유형에 따라 색인 을 지원하는 것이 자신의 콜렉션 유형을 만듭니다.

public class PropertyCollection : List<Property> 
{ 
    public Property this[string name] 
    { 
     get 
     { 
      foreach (Property prop in this) 
      { 
       if (prop.Name == name) 
        return prop; 
      } 
      return null; 
     } 
    } 
} 

및 사용이 컬렉션 대신

PropertyCollection col = new PropertyCollection(); 
col.Add(new Property(...)); 
Property prop = col["some name"]; 
+0

인덱서 사용은 정말 좋습니다. – PraveenLearnsEveryday

+0

방법 2가 아마도 내가 찾고있는 것일 것입니다. 반복은 색인 사용에 중요한 영향을 미칩니 까? 내 컬렉션에는 30 개가 넘는 Property 인스턴스가 없습니다. – MWS

1

당신은 Dictionary를 사용할 수 있습니다. 키는 속성 이름이고 값은 속성 인스턴스 자체입니다.

+0

이름, 값은 My Property 클래스의 단순화 된 버전입니다. 나는 그것을 언급 했어야했다. 다른 멤버들도있다. – MWS

0

사용하십시오 Dictionary<string,Property> :

관련 문제