2011-04-21 6 views
0

C#에서 동적으로 객체 속성에 액세스 할 수 있습니까? 나는 방법을 알아낼 수없는 것 같습니다. VS는 매번 저에게 소리 지르는 것처럼 보입니다.동적으로 객체 속성에 액세스

다음은 내가하려는 일에 대한 예입니다.

그래서 우리는 두 개의 객체로 차를 호출합니다.

Car CAR1 = new Car(); 
Car CAR2 = new Car(); 

이제 myArray라는 배열에 CAR1 및 CAR2가 있습니다.

int count = myArray.length. 

그래서 여기에 문제가 있습니다. 배열이 객체 속성에 액세스 할 수 있지만 루프 할 수 있기를 원합니다.

예컨대

for (int i =0; i < count; i++) 
{ 

    myArry[i].GetProperty; 
    myArry[i].GetProperty2; 
    myArry[i].GetProperty3; 

} 

Howerver, 위, VS하지 않습니다. 어쨌든 내가이 일을 할 수 있니?

+2

무엇이 오류입니까? – locoboy

+1

아니면 적어도 배열 선언 * 및 오류 *를 게시하십시오. –

답변

1

원하는 경우 배열 대신 일반 List<T>을 사용할 수 있습니다.

public class Car{ 
    public string Color {get;set;} 
    public int NumberOfDoors {get;set;} 
} 
public static void Main() { 
    var carList = new List<Car>(); 
    carList.Add(new Car() { Color = "Red", NumberOfDoors = 2 }); 
    carList.Add(new Car() { Color = "Blue", NumberOfDoors = 4}); 

    for (int i = 0; i < carList.Count; i++){ 
     Console.WriteLine(carList[i].Color); 
     Console.WriteLine(carList[i].NumberOfDoors); 
    } 
} 
+0

괜찮은 제안 자체가 있지만,이 질문에 상관이없는 것 같습니다. –

+0

@Adam : 질문을 어떻게 읽나요? –

+1

그는 배열 구성원의 속성에 액세스 할 때 오류가 발생하는 것으로 보입니다. 이것은 단순하지만 (이 시점에서 정의되지 않은) 구문 오류와 더 비슷합니다. –

1

myArray에 "a"가 누락 되었습니까?

0

실제 코드 또는 오류가 표시되지 않으면 확실치 않지만 불가능한 것은 아무 것도하지 않고 속성에 액세스 할 수 없다는 것입니다. Console.WriteLine(myArray[i].GetProperty);이 효과가 있습니까?

+0

아니요 작동하지 않습니다. – Andy12

+0

@Andy, 실제 오류를 사용하고 모든 코드를 표시 할 수 있습니까? 그것 없이는, 우리는 단지 맹목적으로 추측하고 있습니다. – svick

1

여기에 필요한 것은 리플렉션을 사용하는 것입니다. 아니, 내가 디부 ONT 경우 당신이 얻을를 dynmacaly하려면 다음

var t = typeof(Car);//get the type "Car" 
    var carProperties = t.GetProperties();//get all the public instance properties of the Car type 
    var property01 = t.GetProperty("MyPropertyOne");//get a PropertyInfo for the public instance property "MyPropertyOne" of the type "Car" 

를 사용, 모든 질문 ...의 경우

...

이 등록 정보를 얻으려면 이해 자동차의 각 개체의 값은 : 혹시, 이것이 당신이 찾고있는 경우

for (int i =0; i < count; i++) 
{   
    var property01 = t.GetProperty("MyPropertyOne"); 
    var propertyOneValue = property01.GetValue(myArry[i],null); 
    Console.WriteLine(propertyOneValue); 

    var property02 = t.GetProperty("MyPropertyTwo"); 
    var propertyTwoValue = property02 .GetValue(myArry[i],null); 
    Console.WriteLine(propertyTwoValue); 

    //And so on... 
} 

(예 : 무례하게 leastin에) 반사를 사용하여 액세스하는 오보다 drasticaly 느린 점에 유의 속성 지시문 객체

+0

C#에서 var – Andy12

+0

@andy라는 변수 유형이 아닙니다. 매우 재미 있어요 ;-) – Bruno

0

GetProperties 메서드를 사용하면 객체에서 사용하는 모든 속성을 가져올 수 있습니다. 런타임에 클래스 속성에 액세스해야 할 때 PropertyInfo 클래스를 사용합니다. PropertyInfo의 인스턴스는 클래스가 액세스 한 현재 현재 속성을 나타냅니다. GetProperty 메서드는 PropertyInfo 개체의 배열을 반환하는 반면 GetProperty 메서드는 PropertyInfo 개체를 반환합니다. 예 : PropertyInfo [] PrObj = typeobj.Getproperties();

관련 문제