Как получить поля и их значения из статического класса в ссылочной сборке - PullRequest
19 голосов
/ 07 сентября 2011

У меня есть статический класс в сборке с именем (с именем "DAL" ) с именем "A7":

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?

спасибо

Ответы [ 6 ]

34 голосов
/ 07 сентября 2011

Используя отражение, вам нужно будет искать поля; это не свойства. Как видно из следующего кода, он ищет открытые статические члены:

    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();
        }
    }
6 голосов
/ 24 сентября 2012

Я столкнулся с той же проблемой, когда пытался получить свойства, используя этот синтаксис (где «ConfigValues» - это статический класс со статическими свойствами, и я ищу свойство с именем «LookingFor»)

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

Решением было использовать вместо этого оператор typeof

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

, который работает, вам не нужно просматривать их как поля

HTH

3 голосов
/ 07 сентября 2011

См. этот или этот вопрос.

Как вы заметите в первом вопросе, вы также перепутаете свойства и поля.То, что вы объявляете, это поля, а не свойства

Так что вариант должен работать:

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
}
2 голосов
/ 07 сентября 2011

что-то вроде этого:?

FieldInfo[] fieldInfos = typeof(A7).GetFields(BindingFlags.Static | BindingFlags.Public);
0 голосов
/ 14 мая 2019
 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>();
    }
0 голосов
/ 07 сентября 2011

Просто добавьте ссылку на файл DAL.dll (или как вы его называли) и включите его в раздел использования. Тогда вы сможете получить доступ к публичным полям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...