我正在使用腰带和吊带类型检查潜在的空对象问题。虽然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() );
答案 0 :(得分:2)
不确定我是否同意该设计,但考虑到您想要完成的任务,请尝试以下方法。
因此,使用以下内容替换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");