Подтвердить что ты не робот

Отключить предупреждения переадресации, зависящие от типа сборки

Я использую проверку типов ремней и подтяжек для потенциальных проблем с нулевым объектом. Тем не менее, решар не играет хорошо. В сборке отладки он отмечает проверку 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() );
4b9b3361

Ответ 1

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

  • Установить коды контрактов из 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());

    }

Надеюсь, что это поможет.

Ответ 2

Вместо этого используйте Debug.Fail():

if (button != null)
    button.Visible = ( schedule.CreatedBy == Authentification.GetLoggedInUser() );
else
    Debug.Fail("Button was not found");