C# 多重比较,存储结果?

C# 多重比较,存储结果?,c#,performance,C#,Performance,当我正在构建一个类来管理在Android中显示AlertDialog的有点单调和重复的过程时,我偶然发现了以下几点: 我是否应该将比较结果存储到var中并使用它,而不是进行n次相同的比较 在我的例子中,我做了两次相同的比较(比较结果总是一样的,因为在这些比较之间,我没有改变任何可能改变结果的东西) 这就是我所拥有的: public static AlertDialog BuildDialog(活动活动、字符串标题、字符串正文、视图、DialogButton阴性、DialogButton阳性、Di

当我正在构建一个类来管理在Android中显示
AlertDialog
的有点单调和重复的过程时,我偶然发现了以下几点:

我是否应该将比较结果存储到var中并使用它,而不是进行n次相同的比较

在我的例子中,我做了两次相同的比较(比较结果总是一样的,因为在这些比较之间,我没有改变任何可能改变结果的东西)

这就是我所拥有的:

public static AlertDialog BuildDialog(活动活动、字符串标题、字符串正文、视图、DialogButton阴性、DialogButton阳性、DialogButton中性){
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(活动);
alertDialogBuilder.SetTitle(标题);
alertDialogBuilder.SetMessage(正文);
如果(视图!=null){
alertDialogBuilder.SetView(视图);
}
如果(正==null&&negative==null&&neutral==null){
alertDialogBuilder.SetNeutralButton(“确定”,(EventHandler)null);
}否则{
if(负!=null){
alertDialogBuilder.SetNegativeButton(negative.Text,negative.Action);
}
如果(空档!=null){
alertDialogBuilder.SetNeutralButton(neutral.Text,neutral.Action);
}
如果(正!=null){
alertDialogBuilder.SetPositiveButton(positive.Text,positive.Action);
}
}
返回alertDialogBuilder.Create();
}
这就是我现在拥有的:

public static AlertDialog BuildDialog(活动活动、字符串标题、字符串正文、视图、DialogButton阴性、DialogButton阳性、DialogButton中性){
AlertDialog.Builder alertDialogBuilder=新建AlertDialog.Builder(活动);
alertDialogBuilder.SetTitle(标题);
alertDialogBuilder.SetMessage(正文);
布尔值
hasView=view!=null,
hasnutral=中性!=空,
hasPositive=正!=空,
hasNegative=负!=空;
如果(hasView){
alertDialogBuilder.SetView(视图);
}
如果(!hasNeutral&&!hasPositive&&!hasNegative){
alertDialogBuilder.SetNeutralButton(“确定”,(EventHandler)null);
}否则{
如果(负){
alertDialogBuilder.SetNegativeButton(negative.Text,negative.Action);
}
if(hasnutral){
alertDialogBuilder.SetNeutralButton(neutral.Text,neutral.Action);
}
如果(阳性){
alertDialogBuilder.SetPositiveButton(positive.Text,positive.Action);
}
}
返回alertDialogBuilder.Create();
}

虽然在这种特定情况下不会产生明显的影响,但哪一种性能更好,哪一种读起来更好?

在.NET中进行空比较非常便宜,所以这样做的唯一原因是可读性,而不是执行速度。例如,这与复杂条件尤其相关

bool nonNegative = hasPositive || hasNeutral;
...
if (nonNegative) ...

导致代码更紧凑,更易于阅读。

.NET中的空比较非常便宜,所以这样做的唯一原因是可读性,而不是执行速度。例如,这与复杂条件尤其相关

bool nonNegative = hasPositive || hasNeutral;
...
if (nonNegative) ...

使代码更加紧凑,更易于阅读。

看起来您正在尝试对代码进行微优化。20纳秒比40纳秒快吗?试着让你的代码干净、简单、易读。即使我坚持使用@oleksii,并建议让代码更干净,然后进行过度优化,无论如何,你可以将结果存储为位掩码,并比较位掩码(如果你想:),但请记住,这可能会使代码更不可读。正如我所说,在这个特定的场景中,不会有任何区别。这个问题更多的是关于被比较的变量是否太大,这样做会不会更快,因为它只会比较一次。另外,在我看来,这种方式的代码阅读速度更快,更干净(尽管程序员以这种或那种方式自然地阅读)。看起来您正在尝试对代码进行微优化。20纳秒比40纳秒快吗?试着让你的代码干净、简单、易读。即使我坚持使用@oleksii,并建议让代码更干净,然后进行过度优化,无论如何,你可以将结果存储为位掩码,并比较位掩码(如果你想:),但请记住,这可能会使代码更不可读。正如我所说,在这个特定的场景中,不会有任何区别。这个问题更多的是关于被比较的变量是否太大,这样做会不会更快,因为它只会比较一次。另外,从我的观点来看,这种方式的代码读起来更快,更干净(尽管程序员很自然地以这种或那种方式阅读)。事实上,现在我读了你的答案,空检查没什么大不了的,它只是检查变量是否指向内存中的某个地方,对吗?尽管如此,正如我在上面的评论中提到的,从我的角度来看,这种方式使代码更易于阅读。实际上,现在我已经阅读了您的答案,空检查并不是什么大问题,它只是检查var是否指向内存中的某个地方,对吗?尽管如此,正如我在上面的评论中提到的,从我的角度来看,这种方式使代码更易于阅读。