禁用依赖于构建类型的resharper警告

时间:2011-11-16 20:23:30

标签: c# resharper resharper-5.1

我正在使用腰带和吊带类型检查潜在的空对象问题。虽然Resharper打得不好。在调试版本中,它将if (button != null)检查标记为始终为true,并在侧边栏中添加警告标记。在发布版本中,它将Debug.Assert作为从未使用过的代码进行着色,但至少它足够智能,不会使这一侧边条混乱。

我不想全局禁用always 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() );

2 个答案:

答案 0 :(得分:2)

不确定我是否同意该设计,但考虑到您想要完成的任务,请尝试以下方法。

  1. http://research.microsoft.com/en-us/projects/contracts/
  2. 安装代码合同
  3. 将Debug.Asserts重写为Contract.Assert
  4. 然后将项目属性更改为仅检查调试版本中的合同。
  5. 因此,使用以下内容替换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());
    
        }
    

    希望有所帮助。

答案 1 :(得分:0)

您可以尝试使用Debug.Fail()代替:

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