我写了这个返回true / false的函数。我的头脑停留在这个返回算法上,我无法简化它。你能帮我么?我知道关于返回值可能更简单,并且不需要有如此多的返回值,请帮我简化它。
private bool CheckSourseLang(string flnfo)
{
if (CUR_DOWNLOAD.Equals("ST"))
{
if (flnfo.eqauls("English"))
{
for (int i = 0; i < WW_Langs.Count; i++)
{
if (p.Contains(WW_Langs[i]))
{
return true;
}
}
}
else
{
return true;
}
}
else
{
return true;
}
return false;
}
答案 0 :(得分:4)
private bool CheckSourseLang(string flnfo)
{
if (CUR_DOWNLOAD.Equals("ST")) return true;
return !flnfo.Equals("English") || WW_Langs.Any(t => p.Contains(t));
}
答案 1 :(得分:3)
这是一个用于测试的dotnetfiddle。 https://dotnetfiddle.net/kCDIUy
private bool CheckSourseLang(string flnfo)
{
return !CUR_DOWNLOAD.Equals("ST") ||
(!flnfo.Equals("English") ||
WW_Langs.Any(w => p.Contains(w) ) );
}
答案 2 :(得分:2)
返回false
的唯一情况是尝试在数组WW_Langs
中搜索并失败时。让我们明确指出:
private bool CheckSourceLang(string flnfo)
{
if (CUR_DOWNLOAD.Equals("ST") && flnfo.Equals("English"))
{
// Lookup the language string
int i;
for (i = 0; i < WW_Langs.Count && !p.Contains(WW_Langs[i]); i++)
{
}
if (i == WW_Langs.Count)
{
// Array exhausted, the language string was not found !
return false;
}
}
return true;
}
或者,使用更现代的结构:
private bool CheckSourceLang(string flnfo)
{
if (CUR_DOWNLOAD.Equals("ST") && flnfo.Equals("English") &&
!WW_Langs.Any(Lang => p.Contains(Lang)))
{
// Lookup of the language string failed !
return false;
}
return true;
}
IMO,这比return (complex Boolean expression);
更具可读性,因为它清楚地显示了false
案例的内容。如果有一个None
谓词实现!Any
,则会更好,以避免否定。
答案 3 :(得分:-1)
private bool CheckSourseLang(string flnfo)
{
if (!CUR_DOWNLOAD.Equals("ST"))
return true;
if (!flnfo.Equals("English"))
return true;
for (int i = 0; i < WW_Langs.Count; i++)
{
if (p.Contains(WW_Langs[i]))
{
return true;
}
}
return false;
}