让我们假设,我们有以下三种类型:
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允许我直接从其字段或属性值中找到该类?我认为这将是一种更好的方式,因为我们不需要为新类型编辑表格 谢谢你的帮助。
答案 0 :(得分:6)
是的,您可以按字段的值获取类型:
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(x => x.GetField("serial") != null &&
(int)x.GetField("serial").GetValue(null) == 2)
如果类型是在另一个程序集而不是当前正在执行的程序集中定义的,那么您需要首先使用Assembly
类中的方法(例如Load
,LoadFrom
,{}来获取该程序集。 {1}})。
此外,字段应为LoadFile
才能生效,否则您需要一个实例来获取字段值并将其传递给static
方法,而不是 null 。< / p>