【问题标题】:Get variable list of a class [duplicate]获取类的变量列表[重复]
【发布时间】:2014-06-14 00:52:24
【问题描述】:
Class foo
{
   public string name;
   public int age;
   public datetime BirthDate;
}

我有上面的课程。

我想要 foo 类的变量列表。

我试过了

foo fooObj= new foo();
fooObj.GetType().GetProperties()

这返回了 0 个属性。

显然这不起作用,因为类 foo 中没有属性。

【问题讨论】:

  • 这些是字段,不是属性
  • 在大多数情况下,反射是错误的工具,为什么你需要以这种方式获取属性/字段?
  • 你得到了Fields,没有Properties
  • 顺便说一句:为什么不是这些属性? public string Name {get;set;}every 中更可取。 方式。实际上,ageBirthDate 无论如何都是多余的......(一个暗示另一个)
  • @MARKANDBhatt: string fooName = foo.Name;(你也应该关注.NET naming conventions

标签: c#


【解决方案1】:

您的班级有字段,而不是属性。属性具有 getter 和 setter 方法,而字段仅存储数据。

试试

typeof(foo).GetFields()

或将您的字段更改为属性:

Class foo
{
   public string name {get; set;}
   public int age {get; set;}
   public datetime BirthDate {get; set;}
}

或者,要获取字段属性,请使用:

typeof(foo).GetMembers()
           .Where(mi => mi.MemberType == MemberTypes.Field || 
                        mi.MemberType == MemberTypes.Property);

【讨论】:

    【解决方案2】:

    你试过这个吗:

    new foo().GetType().GetFields()
    

    那些是fields 而不是propertiesGetTypeobject 的一个方法。

    只做foo.GetType() 会抛出错误。

    【讨论】:

    • 为什么new 作为代码中的第一个单词?
    • @gunr2171,抱歉错过了() 我正在使用new 运算符创建foo 的对象
    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 2013-04-02
    • 2013-06-15
    • 2021-02-06
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多