2013-04-09 2 views
2

인덱스를 기준으로 속성에 액세스 할 수 있습니까?C# 클래스 속성, 인덱스로 가져 오기

Take 클래스 예를 들어, "BirthNo"및 "Gender"속성을 가질 수있는 Person입니다. BirthNo의 가치에 액세스하려면 p. [0]. 값을 쓰거나 사람을 쓰지 않으면 안됩니다. 생년월일. 값? 당신은 확실히 그것을 쓸 수 있도록

Person p = new Person 
//I have this: 
string birthNo = p.BirthNo.Value; 
//I want this: 
string birthNo = p.[0].Value; 
+6

** ** 속성 ** ** 속성 **이 아닙니다. 인덱스로 가져 오기 위해서는 ** Reflection **을 의사 코드로 사용해야합니다 : string birthNo = (string) p.GetType(). GetProperties() [0] .GetValue (p, null); –

+0

아니오; 너 왜 그러고 싶어? 나는 당신이 원하는 것을 할 수있는 더 좋은 방법이 있다고 생각한다. 인덱스로 속성에 액세스하는 것을 포함하지 않을 것이다. –

+0

@Adriano 당신은 대답으로 대답을 넣어야합니다 – Alex

답변

4

p.[0].Value 올바른 C# 코드가 아닙니다.

당신은 indexers를 사용하여 시도 할 수 있지만, 그런 자신에 의해 많은 로직을 작성해야 할 것 :

public T this[int i] 
{ 
    get 
    { 
     switch(i) 
     { 
      case 0: return BirthNo; 
      default: throw new ArgumentException("i"); 
     } 
    } 
} 

그리고 호출 코드는 이런 식으로 보일 것이다

p[0].Value 

을 그러나 그것은 끔찍한 일이며 그것을 그렇게 사용하는 것에 대해서 생각하지 않아야합니다! *

+1

+1은이 접근법이 얼마나 끔찍한지를 보여주고 말하기위한 것입니다. –

+0

또한 끔찍한 +1. – IdeaHat

1

당신은 단지 strin을 가질 수 있습니다. g 속성이 변경 될 때 Person 클래스 내부의 사전을 작성하고 문자열 값을 작성하십시오. 이런 식으로 뭔가 :

string retreivedBrithNo = person.properties[0]; 

이 매우 지저분하고, 내가 할 수 없습니다 : 사용

person.BirthNo = 1; 

예를 들어, 당신은 다음을 검색 할 수있는 속성을 설정

class Person 
    { 
     Person() 
     { 
      properties.Add(0, "defaultBirthNo"); 
     } 

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

     private int birthNo; 

     public int BirthNo 
     { 
      get { return birthNo;} 
      set { 
       birthNo = value; 
       properties[0] = birthNo.ToString(); 
      } 
     } 
    } 

왜 이런 식으로하고 싶은지 생각해보십시오.하지만 어쨌든 대답입니다! :)

+0

제가 수업을 쓰는 분이라면 충분합니다.나는 그것을 사용하고 있습니다. foreach (personList의 Person p) {PropertyInfo [] 속성 = p.GetType(). GetProperties();로 개체를 이동 한 후. foreach (PersonProperties의 PropertyInfo 항목) {... 내 경우 item.name이 생깁니다. BirthNo. 나는이 사람 birthno의 가치를 원하고, p.item.name이 사용 가능하지 않기 때문에, 나는 색인을 사용하기를 바랐다. 답장을 보내 주셔서 감사합니다 :) –

관련 문제