缩短表达式

时间:2016-04-17 11:23:33

标签: c#

我想问一下是否有一种方法可以像MSSQL一样缩短这个条件,因为我也有类似的编码。

if(docType == "PO" || docType == "II" || docType == "IA" || docType == "IT"  || docType == "OV" || docType == "ID")
{

}

在MSSQL中

SELECT * FROM Documents WHERE docType IN ("PO","II","IA","IT","OV") 

6 个答案:

答案 0 :(得分:3)

您也可以在C#中构建一个数组:

if (new [] {"PO", "II", "IA", "IT", "IV"}.Contains(docType)) {
}

你也可以使用正则表达式:

if (Regex.IsMatch(docType, "PO|II|IA|IT|IV")) {
}

答案 1 :(得分:2)

执行此操作的一种方法是使用params关键字创建一个方法,为您处理它。这允许您传递任意数量的参数以及您正在检查的值

private bool IfContains(string needle, params string[] haystack)
{
    bool match = false;

    foreach(string val in haystack)
    {
        if(val == needle)
        {
            match = true;
            break;
        }
    }
    return match;
}

可以使用许多参数调用它,例如

if(IfContains("Hello", "Hi", "yo", "Hello"))
{
    //DoStuff
}

答案 2 :(得分:1)

好:

var ids = new[] { "PO", "II", "IA", "IT", "OV", "ID" }
if (ids.Contains(docType)
{

}

你甚至可以使它不区分大小写:

var ids = new[] { "PO", "II", "IA", "IT", "OV", "ID" }
if (ids.Contains(docType, StringComparer.InvariantCultureIgnoreCase)
{

}

答案 3 :(得分:1)

是的,将它们放在一个数组中,只需执行一个包含

new[] {"a", "b", "c", "d"}.Contains(value)

而不是

if (value == "a" || value == "b" ...)

答案 4 :(得分:1)

您可以从列表中查看可用于查找列表中任何文档类型的内容:

var list = new List<string>(){"PO","II","IA","IT","OV"};
if(list.Any(x=>x == docType))
{

}

答案 5 :(得分:0)

所有其他答案都有效且不错, 我只想在这里做个原创。我经常在我的代码中使用以下技术来提高可读性并使用“真实的单词”。

我通常在命名上花费“更多时间”,可能是DocTypeIsValid,但我真的喜欢让我的bool函数以“has”或“is”开头。这里的重点是提高可重用性和可读性。

private bool IsDoctypeValid(string docType){
       return docType == "PO" || docType == "II" || docType == "IT" || docType == "IV";
}

请注意,您可以使用其他答案中找到的技术(例如.Contains())并将其放在return方法中,它的工作原理相同:)我想指出的想法是提取方法中的if,以便您可以在以后随处执行此操作:

if (IsDoctypeValid(docType)){

}

超小且超级可读。