是否可以在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没有。无论如何我能做到这一点吗?
答案 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();