Код: Выделить всё
#define LIBRARY_API_VERSION_1_0
< /code>
И я могу делать такие вещи в коде моего приложения: < /p>
#include "LibraryApi.h"
// ...
int success;
#ifdef LIBRARY_API_VERSION_1_0
int param = 42;
success = UseThisMethodSignature(42);
#endif
#ifdef LIBRARY_API_VERSION_2_0
float param = 42.0f;
success = UseOtherMethodSignature(param);
#endif
< /code>
Теперь я работаю в C#. Таким образом, по -видимому, #define Потенциально неэффективно , если я запускаю один и тот же код снова и снова, проверяю дополнительную условную (хотя, если это const , возможно, компилятор или .NET. /> Вы не можете делать вещи, которые бросили ошибки компилятора. В моем вышеприведенном примере я дважды определил Param с двумя разными типами. Также используйте OtherMethodSignature , возможно, не существует в качестве функции, которая не будет компилироваться, если оба блока будут разделены только если /else< /code>. < /li>
< /ul>
Итак, каково принятое решение для этого типа проблемы? Мой сценарий состоит в том, что у меня есть несколько версий API веб -службы (с различными степенями различий в зависимости от того, что вы с ним делаете), и я хочу иметь возможность компилировать ни без комментирования/не покидая кучу кода или какого -либо другого Не менее глупый ручной процесс. < /p>
edit < /h2>
Для того, что оно стоит, я бы предпочел решение времени компиляции -В моем сценарии я знаю, когда я собираю, какую версию я собираюсь использовать, мне не нужно выяснять, какая версия библиотеки доступна в системе во время выполнения. Да, это сработает, но кажется излишним.
Подробнее здесь: https://stackoverflow.com/questions/227 ... in-c-sharp
Мобильная версия