2013-09-25 4 views
0

Я стараюсь, чтобы мои свойства объекта с:Получить свойства объекта в C#

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(); 
    //... 
} 

Что же я делать не так?

+7

Они * поля * не свойства – I4V

+0

http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field-and-a-property-in-c – Shawn

+3

Используйте 'typeof (Myobj) .GetFields()' вместо – Magnus

ответ

3

Попробуйте создать настоящую недвижимость. Вместо этого вы создаете поля.

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

Это потому, что sub1 и sub2 не являются свойствами, они поля. Измените объявление своего класса примерно на следующее:

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

... 
    } 

И инициализируйте свойства новыми объектами внутри вашего конструктора.

Возможно, вы можете попробовать использовать метод GetFields, но это не очень хороший подход.

0

sub1 и sub2 - это поля, не являющиеся собственностью. Попробуйте объявить

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

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

Если вы не хотите, чтобы изменить поля на свойства, которые вы можете использовать typeof(Myobj).GetFields();

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; } 
    } 
Смежные вопросы