【发布时间】:2012-09-11 08:07:05
【问题描述】:
我正在编写一个处理我无法控制的外部数据的程序。这些数据会随着时间而变化,但我希望我的程序与它的各种版本兼容。在其他语言中,我会使用#define 来指定版本,而不是使用#if 来为指定的版本做必要的事情。喜欢
#if VERSION >= 5
...
#endif
我知道这在 C# 中是不可能的,因为它只允许定义符号,但不能为它们分配东西。所以我想知道,实现这一目标的最佳方法是什么?我可以定义 VERSION_5 之类的东西,但我更希望能够检查特定版本,尤其是 ranges,这样会很烦人。我能想到的下一个最好的事情是 const,但这必须在运行时进行检查,这可能会稍微减慢速度。我不确定它是否会在我的项目中引起注意,但我很担心。
在 C# 中是否有标准的方法来执行此操作?最好的方法是什么?
【问题讨论】:
-
版本化合约....
-
为什么要使用预处理器?您不能在运行时使用普通的
if (version >= 5)条件语句做出这样的决定吗? -
就像我说的,我有点担心它可能会在某些时候影响性能。它是一个服务器应用程序,几乎每个传入消息的结构都将依赖于版本。
-
无需担心。此外,我真的不明白它如何与预处理器指令一起使用,因为您需要在 compile 时指定
VERSION符号,但消息只会在运行时到达您...跨度> -
消息具有不同的结构,具体取决于版本。我会为版本 5 编译程序,一旦它运行,只有来自该版本的消息会被正确解释。不是理想的解决方案,但我已经习惯了^^但是如果你说没什么好担心的,我可能会重新考虑const,甚至阅读客户端的版本。
标签: c# c-preprocessor