C# - 从静态类的静态获取属性的值(C# - Get values of static prope

2019-07-19 22:08发布

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

下面是简单的类:

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模块的东西和其他各种东西继承我不关心。 我的3个声明的属性不存在。

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

不要紧,我的静态类是另一个非静态类中实际声明?

我究竟做错了什么?

Answer 1:

问题是, 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(...)如果字段要使用什么。



Answer 2:

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

指定只成员在声明所提供的类型的层次水平应予以考虑。 继承的成员都没有考虑。

由于静态的不能被继承,这可能会导致您的问题。 此外,我注意到你正在试图让字段是不是属性。 因此,尝试使用

type.GetFields(...)


文章来源: C# - Get values of static properties from static class