C#,用常量,编译前或编译后替换特定的函数调用

时间:2018-09-30 17:53:15

标签: c# roslyn-code-analysis mono.cecil

我正在优化一些代码。我们拥有一个系统,在该系统中,我们可以通过函数调用从文件中检索数据,该函数采用对象类型和数据名称,并返回有问题的常量。像这样:

float value = GetData(type, "StartValue");

它也可能看起来像这样,其中类型通过类“ A”是隐式的:

static class A
{
  static void some_function(self)
  {
    float value = self.GetData("StartValue");
  }
}

在特定的发行版中,该值是恒定的,而类型是隐式的,尽管哪些对象定义了该函数(类来自“类”)。我想尝试的是用实际的各个值替换所有GetData调用。然后为some_function和可以调用它的类的每种组合创建一个函数。这些信息对我来说很容易获得,存储在json文件中的常量值也很容易获得。实际函数在运行时与反射链接在一起,因此很容易映射到正确的函数。

类似

static class MyObject //A is "a part" of this class
{
  static void some_function_MyObject_version10(self)
  {
    float value = 5;
  }
}

我已经在最简单的情况下使用Cecil做到了这一点,但是当这些GetData调用嵌套在if语句和其他类似内容中时,我认为复杂性很快就变得一发不可收拾。因此,我正在考虑使用Roslyn / CodeAnalysis执行此操作,但是该文档记录不佳,或者所有示例和教程都已过时。但是,如果这是最好的方法,那么我当然会进行挖掘并使其实现,但是什么是最好的方法呢?

0 个答案:

没有答案