如何从引用程序集中的静态类获取字段及其值

我在一个名为“A7”的refrenced程序集(名为“DAL” )中有一个静态类:

A7是这样的:

public static class A7 { public static readonly bool NeedCoding = false; public static readonly string Title = "Desc_Title" public static readonly string F0 = ""; public static readonly string F1 = "Desc_F1"; public static readonly string F2 = "Desc_F2"; public static readonly string F3 = "Desc_F3"; public static readonly string F4 = "Desc_F4"; } 

如何从DAL汇编A7类获取所有属性名称和值?

谢谢

使用reflection,你需要寻找字段; 这些不是属性。 从下面的代码中可以看出,它查找公共静态成员:

  class Program { static void Main(string[] args) { Type t = typeof(A7); FieldInfo[] fields = t.GetFields(BindingFlags.Static | BindingFlags.Public); foreach (FieldInfo fi in fields) { Console.WriteLine(fi.Name); Console.WriteLine(fi.GetValue(null).ToString()); } Console.Read(); } } 

当我尝试使用这种语法获取属性时,我遇到了同样的问题(其中“ConfigValues”是一个带有静态属性的静态类,我正在寻找一个名为“LookingFor”的属性)

 PropertyInfo propertyInfo = ConfigValues.GetType().GetProperties().SingleOrDefault(p => p.Name == "LookingFor"); 

解决方案是使用typeof运算符

 PropertyInfo propertyInfo = typeof(ConfigValues).GetProperties().SingleOrDefault(p => p.Name == "LookingFor"); 

这是有效的,您不必将它们视为字段

HTH

看到这个或这个问题。

正如您在第一个问题中所注意到的那样,您还会混淆属性和字段。 你宣称的是字段,而不是属性

所以这个的变体应该工作:

 Type myType = typeof(MyStaticClass); FieldInfo[] fields= myType.GetFields( BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); foreach (FieldInfo f in fields) { // use f.Name and f.GetValue(null) here } 

这样的事情:?

 FieldInfo[] fieldInfos = typeof(A7).GetFields(BindingFlags.Static | BindingFlags.Public); 

只需添加对DAL.dll(或任何你称之为)文件的引用,并将其包含在using部分中。 然后你应该能够访问公共字段。