动态访问对象属性

时间:2011-04-21 17:21:48

标签: c# oop object properties

是否可以在C#中动态访问对象属性?我似乎无法想出办法。 VS似乎每次都对我大喊大叫。

以下是我想要做的事情的一个例子。

所以我们有两个对象让它叫它汽车。

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

现在说我在名为myArray的数组中有CAR1和CAR2;

int count = myArray.length.

所以这就是问题,我希望能够循环,但数组能够访问对象属性。

E.g

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

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

}
如上所述,VS没有。无论如何我能做到这一点吗?

4 个答案:

答案 0 :(得分:1)

您是否错过myArray中的“a”?

答案 1 :(得分:1)

这里你需要的是使用反射吗?如果没有,我完全理解这个问题......

如果......

要获取属性,请使用

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

如果有任何机会,这就是你要找的东西,请注意使用反射(至少以这种粗鲁的方式)比直接访问对象属性要快得多

答案 2 :(得分:0)

如果没有实际的代码或您得到的错误,则无法确定,但可能是您无法在不执行任何操作的情况下访问该属性。 Console.WriteLine(myArray[i].GetProperty);有效吗?

答案 3 :(得分:0)

您可以使用GetProperties方法,这将允许您获取对象使用的所有属性。 需要在运行时访问类属性时使用PropertyInfo类.PropertyInfo的实例将表示类访问的当前当前属性。 GetProperty方法返回一个PropertyInfo对象,而GetProperties返回PropertyInfo对象的数组。 例如PropertyInfo [] PrObj = typeobj.Getproperties();