Как получить поля и их значения из статического класса в ссылочной сборке
У меня есть статический класс в переопределенной сборке (с именем "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?
спасибо
Ответы
Ответ 1
Используя отражение, вам нужно будет искать поля; это не свойства. Как вы можете видеть из следующего кода, он ищет публичные статические члены:
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();
}
}
Ответ 2
У меня возникла такая же проблема, когда я попытался получить свойства с помощью этого синтаксиса (где "ConfigValues" - это статический класс со статическими свойствами, и я ищу свойство с именем "LookingFor" )
PropertyInfo propertyInfo = ConfigValues.GetType().GetProperties().SingleOrDefault(p => p.Name == "LookingFor");
Решение заключалось в том, чтобы вместо этого использовать оператор typeof
PropertyInfo propertyInfo = typeof(ConfigValues).GetProperties().SingleOrDefault(p => p.Name == "LookingFor");
то вам не нужно просматривать их как поля
НТН
Ответ 3
См. этот или этот вопрос.
Как вы заметили в первом вопросе, вы также смешиваете свойства и поля. То, что вы объявляете, это поля, а не свойства
Итак, вариант этого должен работать:
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
}
Ответ 4
somthing вроде этого:?
FieldInfo[] fieldInfos = typeof(A7).GetFields(BindingFlags.Static | BindingFlags.Public);
Ответ 5
Просто добавьте ссылку на файл DAL.dll(или что вы его назвали) и включите в раздел использования. Затем вы сможете получить доступ к публичным полям.
Ответ 6
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>();
}