如果条件使用更少的 AND 和 OR 逻辑运算符,如何写得更好?



我有客户组徽标和客户站点徽标。并希望根据特定条件为客户站点徽标分配一个值。

这是我在客户端控制器中的代码.cs

if (site.ImageURL != null && site.ImageURL != "" && clientGroupImage != "/Content/Images/ClientLogoDefault.svg"
&& site.ImageURL != "/Content/Images/ClientSiteLogoDefault.svg" || site.ImageURL != null 
&& site.ImageURL != "" && clientGroupImage == "/Content/Images/ClientLogoDefault.svg" 
&& site.ImageURL != "/Content/Images/ClientSiteLogoDefault.svg")
{
model.SiteLogoURL = site.ImageURL;
}
else if (site.ImageURL == "/Content/Images/ClientSiteLogoDefault.svg" 
&& clientGroupImage != "/Content/Images/ClientLogoDefault.svg" || site.ImageURL == "" 
&& clientGroupImage != "/Content/Images/ClientLogoDefault.svg")
{
model.SiteLogoURL = clientGroupImage;
}
else
{
model.SiteLogoURL = "/Content/Images/ClientSiteLogoDefault.svg";
}

那么有没有办法使用更少的"&&"和"||"运算符编写此代码呢?

有几种方法可以做到这一点;

  • 通过为复杂条件编写布尔函数,将复杂条件与代码分离,以提高可读性和易用性。您还可以将这些功能重用于其他类似方案。
  • 在您的情况下,将字符串文本提取为变量或常量字符串。它们将更容易管理,更易于阅读/使用。就像扎文建议的那样。
  • 嵌套条件,当对于有共同条件的情况。嵌套类似于 if-then 术语。
bool client = clientGroupImage == "/Content/Images/ClientLogoDefault.svg";
bool site = site.ImageURL == "/Content/Images/ClientSiteLogoDefault.svg";
if (!string.IsNullOrEmpty(site.ImageURL) && (!client && !site || client && !site)
{
model.SiteLogoURL = site.ImageURL;
}
else if (!client && (site || site.ImageURL == "")
{
model.SiteLogoURL = clientGroupImage;
}
else
{
model.SiteLogoURL = "/Content/Images/ClientSiteLogoDefault.svg";
}

你的条件语句并不完全清楚,但一般来说,你可以像数学运算符一样对待复合条件语句(带有 AND 和 OR(。

例如,在数学中,你可以这样做:A*B + A*C = A*(B+C)
现在让我们将 A,B,C 视为简单条件,并假设 * 是 AND 并且 + 是 OR。
所以if ((A && B) OR (A && C))也可以if (A && (B OR C))

对于您的具体情况,我需要对第一个if声明进行一些澄清,但我认为您可以执行以下操作:

if (!string.IsNullOrEmpty(site.ImageURL) && site.ImageURL != "/Content/Images/ClientSiteLogoDefault.svg" && 
(clientGroupImage != "/Content/Images/ClientLogoDefault.svg" || clientGroupImage == "/Content/Images/ClientLogoDefault.svg")) 

唯一的区别是clientGroupImage条件,如果您注意到它将涵盖所有情况,因此您可以完全放弃这种情况。

最新更新