Отключить повторные предупреждения, которые зависят от типа сборки
Я использую проверку типов ремней и подтяжек на предмет возможных проблем с нулевым объектом. Решарпер играет не очень хорошо, хотя. В отладочной сборке он отмечает if (button != null)
отметьте как всегда true и поставьте предупреждающий маркер на боковой панели. В сборке релиза он затеняет Debug.Assert
никогда не использовал код, хотя, по крайней мере, он достаточно умен, чтобы на этот раз не загромождать боковую панель.
Я не хочу отключать глобальное предупреждение всегда истина / ложь, потому что это может указывать на проблему в коде. В то же время необходимость загромождать мой код ReSharper disable/restore ConditionIsAlwaysTrueOrFalse
комментарии каждый раз, когда я делаю проверку, ужасны.
Есть ли где-то в ReSharper 5.1 опция для отключения условного поведения типа сборки, чтобы if не отмечалось в отладочных сборках, не предотвращая отображение предупреждения, если Assert
нет?
//This should always work unless the columns are fiddled with.
LinkButton button = e.Row.Cells[5].FindControl( "linkButtonName" ) as LinkButton;
//if this isn't the case in a debug build have VS throw an error in the devs face
Debug.Assert(button != null);
//Don't let anything go boom in production if an error isn't caught in dev
if (button != null)
button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
2 ответа
Не уверен, что я согласен с дизайном, но учитывая то, что вы хотите достичь, попробуйте следующее.
- Установите контракты кода от http://research.microsoft.com/en-us/projects/contracts/
- Переписать ваши Debug.Asserts в Contract.Assert
- Затем измените свойства проекта, чтобы проверять только контракты в отладочной сборке.
Таким образом, кажется, что вашу проблему легче всего решить, заменив debug.assert следующим:
//Throw an error only if there is a problem with
Contract.Assert(button!=null);
Тем не менее, я бы, вероятно, изменил бы дизайн, чтобы сделать работу, выполняемую с помощью кнопки ссылки, следующим способом, предполагая, что с кнопкой ссылки могут происходить другие вещи.
Таким образом, ваш код выше будет:
public void MyMethod(EventArgs e)
{
var button = e.Row.Cells[5].FindControl("linkButtonName") as LinkButton;
SetButtonVisibility(button);
}
public void SetButtonVisibility(LinkButton button)
{
//The button is never null so its a contract
Contract.Requires<ArgumentNullException>(button != null);
button.Visible = (schedule.CreatedBy == Authentification.GetLoggedInUser());
}
Надеюсь, это поможет.
Вы можете попробовать использовать Debug.Fail()
вместо:
if (button != null)
button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
else
Debug.Fail("Button was not found");