Как сделать поле только для отладки в C #? - PullRequest
3 голосов
/ 01 сентября 2009

У меня проблемы с одним и тем же экземпляром класса C #, который используется в нескольких местах. Я хотел бы иметь возможность сразу определить в отладчике, какой экземпляр какой, поэтому я добавил поле с именем DebugUID, например:

public readonly string DebugUID = Guid.NewGuid().ToString();

и я также добавил атрибут [DebuggerDisplay("DebugUID= {DebugUID}")] в класс.

Я бы хотел, чтобы компилятор игнорировал поле DebugUID в режиме выпуска. Если бы это был метод, я бы добавил [Conditional("Debug")] перед ним, но это не позволило бы мне сделать это для полей. Как сделать поле только для отладки в C #?

Ответы [ 4 ]

14 голосов
/ 01 сентября 2009

C # имеет функции условной компиляции, аналогичные C / C ++. Для этого вы можете использовать оператор #if с директивой компиляции, такой как DEBUG.

#if DEBUG
public readonly string DebugUID = Guid.NewGuid().ToString();
#endif

Поскольку по умолчанию только конфигурации «Debug» определяют директиву DEBUG, компиляция выполняется только в режиме отладки. В режиме Release код внутри #if будет игнорироваться.

4 голосов
/ 01 сентября 2009

Могу ли я предложить альтернативу, которая предполагает использование отладчика, а не написание кода?

Щелкните правой кнопкой мыши экземпляр в окне просмотра и выберите «Присвоить идентификатор объекта». Этот объект теперь будет отображаться с этим идентификатором на протяжении всего сеанса отладки. Повторите эти действия для других экземпляров того же класса, которые вас интересуют.

1 голос
/ 01 сентября 2009

Вы можете использовать условный препроцессор, включающий

#if DEBUG
private readonly string debugId = Guid.NewGuid().ToString();
#endif
1 голос
/ 01 сентября 2009

Попробуйте использовать директиву препроцессора # if :

class Value {

#if DEBUG
private readonly string DebugUID = Guid.NewGuid().ToString()
#endif

}

Вы должны будете убедиться, что флаг DEBUG установлен для отладки сборок (и, конечно, не установлен для релизных сборок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...