3

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

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

objects.add(obj);

Int value = objects(0).somevariable;

但它显然无法读取“somevariable”,因为代码不知道对象有它。由于列表中的所有对象都具有变量“somevariable”,这样做是否可行?

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

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

4

4 回答 4

4

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

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

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

var objects = new List<IMyInterface>();
int value = objects[0].Somevariable;
于 2013-05-21T20:50:04.447 回答
2

你必须使用反射。

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

(但如果可能的话当然使用界面:))

于 2013-05-21T20:49:43.883 回答
2

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

于 2013-05-21T20:50:03.310 回答
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;
于 2013-05-21T20:52:36.893 回答