当我真的不知道这叫什么时,我很难弄清楚这是否可能。
我有一个 APIKey(可以随着不同的版本而改变),我们还有另一个字段可以将该 APIKey 转换为对网络更加友好。 这是网络友好的,我想让编译器计算。
目前我们正在重新计算每次调用 webapi 的值。 我可以轻松地定义一个 const 并放入它的网络友好版本,但我想要更花哨一点并提供更少的维护。
我想要的就是这样的。
public class WebSearch{
private const string ApiKey="jsdfjsd90234092j3_%sss";
private const string WebFriendlyKey=#Compiler(ApiKey.Replace("-","+"));
}
WebFriendlyKey 由编译器计算。
C# 4 规范的第 7.19 节列出了编译器将代表您对常量执行的每个操作。字符串替换不是其中之一。
但是,您可以使用 readonly static 字段,或具有静态属性的只读静态字段,如果尚未计算该值,则计算该值;如果已计算该值,则获取该值。在这种情况下,编译器不会进行编译,但每个应用程序域只会执行一次计算。
也就是说,我同意亨克的观点。你这里有更大的鱼要炸。担心实际影响正确性或性能的事情。
我不相信当前的 C# 编译器可以做到这一点。 也许随着新的模块化编译器的出现(Roslyn)。
您现在可以做的就是每次进程启动时计算一次 WebFriendlyKey,并在进程的整个生命周期内存储它,我向您保证,从性能角度来看,这与常量一样好:
public class WebSearch{
private const string ApiKey="jsdfjsd90234092j3_%sss";
// This guy will only run once per AppDomain
private static readonly string WebFriendlyKey = ApiKey.Replace("-","+");
}