2013-05-21 73 views
3

我有一个'对象'列表,它有不同种类的对象。我需要能够编辑/读取所有对象的属性,但我不知道该怎么做。从未知对象访问属性/变量

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

objects.add(obj); 

Int value = objects(0).somevariable; 

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

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

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

+0

我希望那是不可能的,否则就太容易了有人找出各种数据通过网络去的。 – jp2code

+0

这是一个非常普遍的问题,解决方案是从一个包含所需属性的类继承所有对象。 – Casperah

+0

http://stackoverflow.com/questions/919699 –

回答

1

你必须使用反射。

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

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

2

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

4

如果你可以修改这些类,让您的方案意义上,你可以定义一个通用的接口

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

,让你的类实现这个接口,那么你就可以创建一个通用的名单像这样

var objects = new List<IMyInterface>(); 
int value = objects[0].Somevariable; 
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;