我有一个'对象'列表,其中包含不同类型的对象。我需要能够编辑/读取所有对象的属性,但我不知道该怎么做。
List<object> objects = new list<object>();
SomeObject obj;
objects.add(obj);
Int value = objects(0).somevariable;
但它显然无法读取'somevariable',因为代码不知道对象有它。这样做是可能的,因为列表中的所有对象都有变量'somevariable'?
另外,我正在使用XNA,但这可能没有任何区别。
编辑:感谢大家的回答,明天我会在电脑上试试。
答案 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;