如何从属性值反映一个类?

时间:2015-02-04 14:39:55

标签: c# system.reflection

让我们假设,我们有以下三种类型:

class class1{ public static int serial=1};
class class2{ public static int serial=2};
class class3{ public static int serial=3};

序列可以是静态字段或属性,如:

class class1{ public override byte serial {get{return 0x01; }}};

在我的应用程序中,我从某处收到序列值,需要反映相应的类。是否可以使用该项目的序列字段反映任何这些类型?我是否必须在序列ID和类名之间创建一个映射表来查找反射的相关类名?或System.Reflection允许我直接从其字段或属性值中找到该类?我认为这将是一种更好的方式,因为我们不需要为新类型编辑表格 谢谢你的帮助。

1 个答案:

答案 0 :(得分:6)

是的,您可以按字段的值获取类型:

var type = Assembly.GetExecutingAssembly()
           .GetTypes()
           .FirstOrDefault(x => x.GetField("serial") != null && 
                               (int)x.GetField("serial").GetValue(null) == 2)

如果类型是在另一个程序集而不是当前正在执行的程序集中定义的,那么您需要首先使用Assembly类中的方法(例如LoadLoadFrom,{}来获取该程序集。 {1}})。

此外,字段应为LoadFile才能生效,否则您需要一个实例来获取字段值并将其传递给static方法,而不是 null 。< / p>