简体   繁体   English

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

[英]C# - Get values of static properties from static class

I'm trying to loop through some static properties in a simple static class in order to populate a combo box with their values, but am having difficulties. 我试图在一个简单的静态类中循环一些静态属性,以便用它们的值填充组合框,但是遇到了困难。

Here is the simple class: 这是简单的类:

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

... and the code attempting to retrieve the values: ...以及试图检索值的代码:

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

If I don't supply any binding flags then I get about 57 properties including things like System.Reflection.Module Module and all sorts of other inherited things I don't care about. 如果我不提供任何绑定标志,那么我得到大约57个属性,包括System.Reflection.Module模块和我不关心的各种其他继承的东西。 My 3 declared properties are not present. 我的3个声明的属性不存在。

If I supply various combinations of other flags then it always returns 0 properties. 如果我提供其他标志的各种组合,那么它总是返回0属性。 Great. 大。

Does it matter that my static class is actually declared within another non-static class? 我的静态类是否真的在另一个非静态类中声明是否重要?

What am I doing wrong? 我究竟做错了什么?

The problem is that property1..3 are not properties, but fields. 问题是property1..3不是属性,而是字段。

To make them properties change them to: 要使它们属性更改为:

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

Or use auto properties and initialize their values in the static constructor of the class: 或者使用自动属性并在类的静态构造函数中初始化它们的值:

public static string property1 { get; set; }

static MyStaticClass()
{
  property1 = "NumberOne";
}

...or use myType.GetFields(...) if fields are what you want to use. ...或者如果您想要使用字段,请使用myType.GetFields(...)

Try removing BindingFlags.DeclaredOnly , because according to MSDN: 尝试删除BindingFlags.DeclaredOnly ,因为根据MSDN:

Specifies that only members declared at the level of the supplied type's hierarchy should be considered. 指定仅应考虑在提供的类型的层次结构级别声明的成员。 Inherited members are not considered. 不考虑继承的成员。

Since static's cannot be inherited, this might be causing your issues. 由于静态不能被继承,这可能会导致您的问题。 Also I noticed the fields you are trying to get are not properties. 另外我注意到你想要获得的字段不是属性。 So try using 所以尝试使用

type.GetFields(...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM