Динамический доступ к свойству объекта - PullRequest
0 голосов
/ 21 апреля 2011

Возможно ли динамическое обращение к свойству объекта в C #? Я не могу придумать способ. Кажется, VS каждый раз кричит на меня.

Вот пример того, что я пытаюсь сделать.

Итак, у нас есть два объекта, назовем это автомобилем.

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

Теперь скажите, что у меня есть CAR1 и CAR2 в массиве с именем myArray;

int count = myArray.length.

Так вот в чем проблема, я хочу иметь возможность зацикливаться, хотя массив будет иметь доступ к свойствам объекта.

* 1013 например *

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

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

}

Howerver, выше, VS нет. Могу ли я как-нибудь это сделать?

Ответы [ 4 ]

1 голос
/ 21 апреля 2011

Кажется ли вам настолько очевидным, что вам нужно использовать отражение?Если нет, я вообще не понимаю вопроса ...

В случае ...

Чтобы получить свойства, используйте

   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"

Тогда еслиВы хотите, чтобы dynmacaly получала значения каждого из ваших автомобильных объектов:

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...
}

Если по какой-то случайности это то, что вы ищете, имейте в виду, что использование отражения (по крайней мере таким грубым способом)значительно медленнее, чем прямой доступ к свойствам объекта

1 голос
/ 21 апреля 2011

Может быть, вы пропустили "а" в myArray?

0 голосов
/ 21 апреля 2011

Для этого вы можете использовать метод GetProperties, который позволит вам получить все свойства, используемые объектом. Используйте класс PropertyInfo, когда вам нужно получить доступ к свойствам класса во время выполнения. Экземпляр PropertyInfo будет представлять текущее текущее свойство, к которому обращается класс. Метод GetProperty возвращает один объект PropertyInfo, а метод GetProperties возвращает массив объектов PropertyInfo. например, PropertyInfo [] PrObj = typeobj.Getproperties ();

0 голосов
/ 21 апреля 2011

Без фактического кода или ошибки, которую вы получаете, невозможно быть уверенным, но может случиться так, что вы не сможете получить доступ к свойству, ничего не делая с ним.Console.WriteLine(myArray[i].GetProperty); работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...