Можно ли использовать условный атрибут для создания схожего отладчика и метода времени выполнения?
Можно ли создать 2 метода, которые имеют одинаковое имя метода, передаются в значениях и возвращаются с использованием условного атрибута и, например, некоторого антиусловия
[Conditional("Debug")]
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
guidString = guidString.Replace("=", "");
guidString = guidString.Replace("+", "");
return guidString;
}
[!Conditional("Debug")]// I know using '!' doesn't really work
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
return guidString;
}
чтобы вы могли просто вызвать метод и в зависимости от того, определен ли "Debug", компилятор выберет какой метод?
Спасибо
3 ответа
Вы можете попробовать использовать #if DEBUG
синтаксис вроде так:
#if DEBUG
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
guidString = guidString.Replace("=", "");
guidString = guidString.Replace("+", "");
return guidString;
}
#else
private string StringGenerator()
{
Guid g = Guid.NewGuid();
string guidString = Convert.ToBase64String(g.ToByteArray());
return guidString;
}
#endif
Тем не менее, есть некоторые различия с использованием этого. Смотрите этот вопрос для более подробной информации.
Нет, это невозможно. Conditional
Атрибут не контролирует, определен ли метод в коде, он просто контролирует условия, при которых вызов метода включается в код вызова.
Дополнительно это возможно для Conditional
атрибут, который будет применяться несколько раз к методу. Следовательно, нет просто on / off
решение будет принято здесь. Рассматривать
[Conditional("DEBUG")]
[Conditional("TRACE")]
void Target() { ... }
Здесь нужно рассмотреть 4 комбинации, а не только 2.
Вы не можете иметь несколько функций / методов с одним и тем же именем и одной и той же подписью. Однако вы можете перегрузить метод, изменив его сигнатуру. Например:
Private Function myMethod() As String
Return "D"
End Function
Private Function myMethod(ByVal myString As String) As String
Return "D"
End Function
Вместо того, чтобы пытаться создать одну и ту же точную функцию, которая выполняет две разные вещи, может быть лучше передать переменную и, в зависимости от значения, сделать две разные вещи.
Private Function myFunction(ByVal test As String) As String
if(test.toUpper()= "QA") then
'do one thing
elseif(test.toUpper() = "LOCAL"
'do another
else
'must be Prod
end if
end Sub
Обычно в моем файле web.config есть ключ, который обозначает, какую среду я использую (Local, QA, Prod), и в зависимости от этого значения я передаю другой параметр в свою функцию / метод. Затем, когда я публикую, я изменяю ключ веб-конфигурации