0

我尝试通过以下方式获取我的对象属性:

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

4 回答 4

3

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

[StructLayout(LayoutKind.Sequential, Pack = 1)]
class Myobj
{
    public Subobj1 Sub1 {get; set;}
    public Subobj2 Sub2 {get; set;}
}
于 2013-09-25T14:02:13.287 回答
1

那是因为sub1andsub2不是属性,它们是字段。将您的类声明更改为如下所示:

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

...
    }

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

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

于 2013-09-25T14:02:50.110 回答
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; }
    }
于 2013-09-25T14:03:56.133 回答
0

sub1并且sub2是字段而不是属性。尝试声明

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

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

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

于 2013-09-25T14:03:02.490 回答