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(...)