在C#中获取对象属性

时间:2013-09-25 14:00:19

标签: c# .net reflection

我尝试使用以下方法获取对象属性:

PropertyInfo[] p = typeof(Myobj).GetProperties()

但我只收到

{System.Reflection.PropertyInfo[0]}

我的对象如下:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
class Myobj
{
  public Subobj1 sub1= new Subobj1();
  public Subobj2 sub2= new Subobj2();
  //...
}

我做错了什么?

4 个答案:

答案 0 :(得分:3)

尝试创建真实属性。您正在创建字段。

[StructLayout(LayoutKind.Sequential, Pack = 1)]
class Myobj
{
    public Subobj1 Sub1 {get; set;}
    public Subobj2 Sub2 {get; set;}
}

答案 1 :(得分:1)

那是因为sub1sub2不是属性,而是字段。将您的类声明更改为以下内容:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
    class Myobj
    {
        public Subobj1 sub1 {get; set; }
        public Subobj2 sub2 {get; set; }

...
    }

使用构造函数中的新对象初始化属性。

或者,您可以尝试使用GetFields方法,但这不是一个好方法。

答案 2 :(得分:0)

sub1sub2是字段而非属性。尝试声明

public Subobj1 sub1 { get; set; }
public Subobj2 sub2 { get; set; }

public Myobj()
{
    sub1 = new Subobj1();
    sub2 = new Subobj2();
}

如果您不想将字段更改为属性,可以使用typeof(Myobj).GetFields();

答案 3 :(得分:0)

[StructLayout(LayoutKind.Sequential, Pack = 1)]
    class Myobj
    {
        public Myobj() {
             sub1 = new Subobj1();
             sub2 = new Subobj2();
        }

        public Subobj1 sub1 { get; set; }
        public Subobj2 sub2 { get; set; }
    }