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

a.t*_*aby 1 c# system.reflection

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

class class1{ public static int serial=1};
class class2{ public static int serial=2};
class class3{ public static int serial=3};
Run Code Online (Sandbox Code Playgroud)

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

class class1{ public override byte serial {get{return 0x01; }}};
Run Code Online (Sandbox Code Playgroud)

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

Sel*_*enç 6

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

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

如果类型在另一个组件,而不是当前执行的程序集定义,那么你需要使用方法首先要获取组件Assembly类(如Load,LoadFrom,LoadFile).

并且字段应该按static顺序使用,否则您需要一个实例来获取字段值并将其传递给GetValue方法而不是null.

  • 最好添加一个关于字段必须是静态的要求的说明才能使其工作. (2认同)