【问题标题】:Access property/variable from unknown object从未知对象访问属性/变量
【发布时间】:2013-05-21 20:46:18
【问题描述】:

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

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

objects.add(obj);

Int value = objects(0).somevariable;

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

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

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

【问题讨论】:

  • 我希望那是不可能的,否则就太容易搞清楚网络上传输的各种数据了。
  • 这是一个很常见的问题,解决方法是从一个包含所需属性的类中继承所有对象。

标签: c# list object properties


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你必须使用反射。

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

      (但如果可能的话当然使用接口:))

      【讨论】:

        【解决方案4】:

        制作包含“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;
        

        【讨论】:

          猜你喜欢
          • 2017-07-05
          • 2012-07-02
          • 2011-06-10
          • 2012-11-28
          • 2021-10-25
          相关资源
          最近更新 更多