C# – 从静态类获取静态属性的值

我试图循环通过一个简单的静态类中的一些静态属性,以填充他们的价值combobox,但有困难。

这是简单的课程:

public static MyStaticClass() { public static string property1 = "NumberOne"; public static string property2 = "NumberTwo"; public static string property3 = "NumberThree"; } 

…和试图检索值的代码:

 Type myType = typeof(MyStaticClass); PropertyInfo[] properties = myType.GetProperties( BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); foreach (PropertyInfo property in properties) { MyComboBox.Items.Add(property.GetValue(myType, null).ToString()); } 

如果我不提供任何绑定标志,那么我得到大约57个属性,包括像System.Reflection.Module模块和其他各种我不关心的其他inheritance的东西。 我的3个声明的属性不存在。

如果我提供其他标志的各种组合,那么它总是返回0属性。 大。

我的静态类实际上是在另一个非静态类中声明的吗?

我究竟做错了什么?

问题是, property1..3不是属性,而是字段。

为了使他们的属性改变他们:

 private static string _property1 = "NumberOne"; public static string property1 { get { return _property1; } set { _property1 = value; } } 

或者使用自动属性并在类的静态构造函数中初始化它们的值:

 public static string property1 { get; set; } static MyStaticClass() { property1 = "NumberOne"; } 

…或使用myType.GetFields(...)如果字段是你想使用的。

尝试删除BindingFlags.DeclaredOnly ,因为根据MSDN:

指定只应考虑在提供的types层次结构级别声明的成员。 inheritance的成员不被考虑。

由于静态不能被inheritance,这可能会导致你的问题。 另外我注意到你试图得到的领域不属性。 所以请尝试使用

 type.GetFields(...)