是用更多的代码一次求值好,还是用更少的代码多次求值好?

本文关键字:代码 一次 | 更新日期: 2023-09-27 18:15:56

bool进行一次评估是否更好,但有更多这样的代码

 if (klient.Podmioty.PodmiotRodzaj == "Osoba") {
     textImie.Enabled = true;
     textNazwisko.Enabled = true;
     textNazwa.Enabled = false;
 } else {
     textImie.Enabled = false;
     textNazwisko.Enabled = false;
     textNazwa.Enabled = true;
 }

比较
      textImie.Enabled = klient.Podmioty.PodmiotRodzaj == "Osoba";
      textNazwisko.Enabled = klient.Podmioty.PodmiotRodzaj == "Osoba";
      textNazwa.Enabled = klient.Podmioty.PodmiotRodzaj != "Osoba";

这是一个通用的问题,也许这个小例子是微优化,但我想知道是否重复使用相同的bool不被认为是坏代码。

可能有用的注意是,klient.Podmioty.PodmiotRodzaj实际上是由实体框架带来的SQL变量

是用更多的代码一次求值好,还是用更少的代码多次求值好?

计算一次并使用结果:

var conditionValue = (klient.Podmioty.PodmiotRodzaj == "Osoba");
textImie.Enabled = conditionValue;
textNazwisko.Enabled = conditionValue;
textNazwa.Enabled = !conditionValue;

第一个选项,更少的计算时间和不复制代码…

或选项C:

bool value = klient.Podmioty.PodmiotRodzaj == "Osoba";
textImie.Enabled = value;
textNazwisko.Enabled = value;
textNazwa.Enabled = !value;

第一个是常见的答案,第二个很难读懂。但是,由于您只将bool设置为与条件相同的值,因此还有第三个选项:

bool t = (klient.podmioty.PodmiotRodzaj == "Osaba");
TextImed.Enabled = t;
TextNazwisko.Enabled = t;
TextNazwa.Enabled = !t;

(在电话上,所以我可能把变量名搞错了)这可能比第一个选项略显不清晰,但很简短(并避免了代码分叉)。