我经常发现自己面对那种代码:
if(Something > 0)
{
btnOne.Enabled = true;
btnTwo.Enabled = true;
btnThree.Enabled = false:
}
else
{
btnOne.Enabled = false;
btnTwo.Enabled = false;
btnThree.Enabled = true:
}
而且我一直想知道让它像那样更好,或者说是这样:
bool ButtonEnabled = (Something > 0);
btnOne.Enabled = ButtonEnabled;
btnTwo.Enabled = ButtonEnabled;
btnThree.Enabled = !ButtonEnabled;
认识到这个问题有点争论,让我们抛开“可读性”因素并专注于绩效因素......什么是最好的?还有一个任务或条件?
提前感谢您的建议(或更好的写作方式)!
编辑:更正了我的第二个代码段中的错误。 编辑:两个最初的例子不等同......
答案 0 :(得分:5)
这取决于被调用的属性。如您所知,物业可以做任何事情。在Windows窗体或WPF中,我不担心它。我认为后一种风格的正确性和可读性。如果每次都设置所有必要的变量,则丢失某些内容并使一个按钮处于无效状态的可能性较小。
我会做类似
的事情bool ButtonEnabled = (Something > 0);
btnOne.Enabled = ButtonEnabled;
btnTwo.Enabled = ButtonEnabled;
btnThree.Enabled = !ButtonEnabled;
btnFour.Enabled = !ButtonEnabled;
答案 1 :(得分:1)
在这种情况下,您可能会看到两者之间的性能差异很可能是微不足道的,所以我会选择最具可读性的差异。
答案 2 :(得分:1)
您无法比较这两段代码,无论是在可读性还是性能方面,因为它们会产生不同的结果。
与第二个代码相同的第一个代码的版本是:
if(Something > 0)
{
btnOne.Enabled = true;
btnTwo.Enabled = true;
btnThree.Enabled = false;
btnFour.Enabled = false;
}
else
{
btnOne.Enabled = false;
btnTwo.Enabled = false;
btnThree.Enabled = true;
btnFour.Enabled = true;
}
第二个代码的版本与第一个代码相同:
bool ButtonEnabled = (Something > 0);
btnOne.Enabled = ButtonEnabled ? true : btnOne.Enabled;
btnTwo.Enabled = ButtonEnabled ? true : btnTwo.Enabled;
btnThree.Enabled = !ButtonEnabled ? false : btnThree.Enabled;
btnFour.Enabled = !ButtonEnabled ? false : btnFour.Enabled;
因此,第一段代码显然比它的等效替代方案更有效和可读,并且第二段代码比它的等效替代方案更短且更容易维护。
答案 3 :(得分:1)
是的,与您的应用程序不同,同时显示了十万个按钮,将HEAVILY
集中在可读性上,而不是微优化!无论如何,UI层更新控件的视觉效果的时间将比“启用”分配长10.000倍!
解决方案2实际上几乎是您在使用数据绑定时想要做的事情(您非常接近:p)。实际上,你会编写更像的代码:
public class MyClass {
public bool IsSomethingTrue { get; set; } // with notification on property changed
public bool IsSomethingFalse { get { return !IsSomethingTrue; } }
private AMethod() {
...
IsSomethingTrue = Something > 0;
...
}
你的UI就像(WPF风格):
<Button IsEnabled={Binding IsSomethingTrue} /> <!-- btn 1 -->
<Button IsEnabled={Binding IsSomethingTrue} /> <!-- btn 2 -->
<Button IsEnabled={Binding IsSomethingFalse} /> <!-- btn 3 -->
<Button IsEnabled={Binding IsSomethingFalse} /> <!-- btn 4 -->
<!-- Want a 5th button ? just add it without changing your code-behind ! -->
此模式允许您根据需要添加任意数量的按钮,而无需每次都更改方法。当方法趋于复杂时,这尤其有用,并且它提高了可读性。
适用于WPF,Qt,Java,我认为Winforms应该提供一些数据绑定功能。