#if, #else, #endif в исходном коде C # - PullRequest
4 голосов
/ 23 января 2011

У меня есть пример кода из MSDN, и я нашел синтаксис кода, который никогда раньше не видел:

namespace Mvc3RemoteVal.Controllers 
{
        public class HomeController : Controller
        {
            IUserDB _repository;

#if  InMemDB
            public HomeController() : this(InMemoryDB.Instance) { }
#else
            public HomeController() : this(new EF_UserRepository()) { }
#endif


            public HomeController(IUserDB repository) 
            {
                _repository = repository;
            }

            [...]
        }

Что это за #if, #else, #endif?

А что такое #if InMemDB?

Что такое InMemDB?Переменная?

Ответы [ 2 ]

14 голосов
/ 23 января 2011

Они называются директивами препроцессора и существуют с .NET 1.0. Они позволяют вам определять различные директивы компиляции, такие как InMemDB, и компилятор будет оценивать или нет блок, если эта переменная была определена. Документация директивы # if содержит более подробный обзор.

Чтобы определить переменную, вы можете использовать опцию компилятора / define или использовать Условные символы компиляции на вкладке Build свойств проект в Visual Studio:

alt text

1 голос
/ 23 января 2011

Это не новые функции для Framework 4

это функции, которые вы можете использовать на стадии разработки и тестирования: Вы можете объявить:

#Define something

, а затем

#if something

весь код, который находится в этом «если», будет выполнен. весь код, которого нет, не будет.

...