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

3
我有一个“对象”列表,其中包含不同类型的对象。我需要能够编辑/读取所有对象都具有的属性,但我不知道如何做到这一点。
List<object> objects = new list<object>();
SomeObject obj;

objects.add(obj);

Int value = objects(0).somevariable;

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

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

编辑:感谢大家的答案,明天我会尝试。


我希望这是不可能的,否则某人就可以轻易地找出通过网络传输的各种数据。 - user153923
这是一个非常常见的问题,解决方案是从一个包含所需属性的类继承所有对象。 - Casperah
https://dev59.com/v0fRa4cB1Zd3GeqP_8Nc - Robert Harvey
4个回答

4
如果您能修改这些类并使其符合您的场景,您可以定义一个通用接口。
public interface IMyInterface
{
     int Somevariable { get; set;}
}

让您的类实现此接口,然后您就可以创建一个通用列表,如下所示:

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

2

你需要使用反射技术。

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

(但是如果可能的话,请使用接口:))

2

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


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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接