我们有一个项目被编译成一个名为consts.dll的DLL,其中包含以下内容:

public static class Consts
{
    public const string a = "a";
    public const string b = "b";
    public const string c = "c";
}

我们有多个此类项目,每个项目都编译成同名的DLL(consts.dll),并根据需要替换它们。
我们还有另一个使用这些const的类:
public class ConstsUser
{
    string f() { return Consts.a; }
}

不幸的是,Consts.a被优化为“a”,所以即使我们替换Consts.dll实现,我们仍然会得到“a”而不是正确的值,并且我们需要重新编译ConstsUser。是否有任何方法可以阻止优化器将const变量替换为其值?

最佳答案

我认为static readonly修饰符的使用符合您的需求:

public static class Consts
{
    public static readonly string a = "a";
    public static readonly string b = "b";
    public static readonly string c = "c";
}

常量在调用站点上进行了硬编码,因此这就是您的问题。静态只读变量只能在Consts类的变量声明或静态构造函数中进行修改,并且不会在调用站点上内联。

10-08 12:38