从未知对象访问属性/变量

时间:2013-05-21 20:46:19

标签: c# list object properties

我有一个'对象'列表,其中包含不同类型的对象。我需要能够编辑/读取所有对象的属性,但我不知道该怎么做。

List<object> objects = new list<object>();
SomeObject obj;

objects.add(obj);

Int value = objects(0).somevariable;

但它显然无法读取'somevariable',因为代码不知道对象有它。这样做是可能的,因为列表中的所有对象都有变量'somevariable'?

另外,我正在使用XNA,但这可能没有任何区别。

编辑:感谢大家的回答,明天我会在电脑上试试。

4 个答案:

答案 0 :(得分:4)

如果您可以修改这些类并在您的场景中有意义,那么您可以定义一个公共接口

public interface IMyInterface
{
     int Somevariable { get; set;}
}

让你的类实现这个接口,然后你就可以创建像这样的通用列表

var objects = new List<IMyInterface>();
int value = objects[0].Somevariable;

答案 1 :(得分:2)

你必须使用反射。

public static object GetPropertyValue(object obj, string propertyName)
{
     return obj.GetType().GetProperty(propertyName).GetValue(obj, null);
}

(当然,如果可能,请使用界面:))

答案 2 :(得分:2)

定义一个包含要为所有对象访问的方法和属性的接口,让这些对象的类实现此接口并将列表声明为List。或者使用反射,但通常不是这样。

答案 3 :(得分:0)

使基类包含“somevariable”和BaseClasses列表,因此可以执行list [0] .somevariable。

class MyBaseClass
{
    public int SomeVariable{get;set;}
}
class MyDerivedClass : MyBaseClass
{
.............
}

List<MyBaseClass> l=new List<MyBaseClass>();
l[0].SomeVariable=111;