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

本文关键字:获取 静态类 字段 集中 引用 程序 程序集 | 更新日期: 2023-09-27 18:07:46

我在引用程序集(命名为"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类获得所有属性名称和值?

谢谢

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

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

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);
 public static IEnumerable<T> GetAll<T>() where T : class
    {
      var fields = typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
       return fields.Select(f => f.GetValue(null)).Cast<T>();
    }

只需添加一个引用到dll .dll(或任何你叫它的)文件,并将其包含在using节中。然后您应该能够访问公共字段。