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

C# 从未知对象访问属性/变量,c#,list,object,properties,C#,List,Object,Properties,我有一个“对象”列表,其中包含不同类型的对象。我需要能够编辑/读取所有对象的属性,但我不知道如何做到这一点 List<object> objects = new list<object>(); SomeObject obj; objects.add(obj); Int value = objects(0).somevariable; List objects=newlist(); someobjectobj; 对象。添加(obj); Int值=对象(0); 但它显

我有一个“对象”列表,其中包含不同类型的对象。我需要能够编辑/读取所有对象的属性,但我不知道如何做到这一点

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

objects.add(obj);

Int value = objects(0).somevariable;
List objects=newlist();
someobjectobj;
对象。添加(obj);
Int值=对象(0);
但它显然无法读取“somevariable”,因为代码不知道对象拥有它。因为列表中的所有对象都有变量“somevariable”,所以可以这样做吗

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


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

你必须使用反射

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

(但如果可能,当然要使用接口:)

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

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

public interface IMyInterface
{
     int Somevariable { get; set;}
}
让你的类实现这个接口,然后你就可以创建一个像这样的通用列表

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

使基类包含“somevariable”,并列出基类,因此列出[0]。somevariable是可以做到的

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

List<MyBaseClass> l=new List<MyBaseClass>();
l[0].SomeVariable=111;
类MyBaseClass
{
公共int变量{get;set;}
}
类MyDerivedClass:MyBaseClass
{
.............
}
列表l=新列表();
l[0].SomeVariable=111;

我希望这是不可能的,否则,人们很容易就知道网络上的各种数据。这是一个非常常见的问题,解决方案是从一个包含所需属性的类继承所有对象。