简化bool功能

时间:2014-10-02 06:33:21

标签: c# algorithm

我写了这个返回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;
    }

4 个答案:

答案 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;
        }