Отключить предупреждения переадресации, зависящие от типа сборки
Я использую проверку типов ремней и подтяжек для потенциальных проблем с нулевым объектом. Тем не менее, решар не играет хорошо. В сборке отладки он отмечает проверку if (button != null)
как всегда true и помещает предупреждающий маркер в боковую панель. В релиз-сборке он выделяет Debug.Assert
как никогда не используемый код, хотя по крайней мере он достаточно умен, чтобы на этот раз не загромождать боковую панель.
Я не хочу отключать предупреждение true/false resharper глобально, потому что это может указывать на проблему в коде. В то же время каждый раз, когда я делаю чек, нужно загромождать код с комментариями 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() );
Ответы
Ответ 1
Не уверен, что я согласен с дизайном, но с учетом того, что вы хотите выполнить, попробуйте следующее.
Итак, кажется, ваша проблема наиболее легко решена путем замены 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());
}
Надеюсь, что это поможет.
Ответ 2
Вместо этого используйте Debug.Fail()
:
if (button != null)
button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
else
Debug.Fail("Button was not found");