【问题标题】:Shortening if Expressions缩短 if 表达式
【发布时间】:2016-08-09 02:53:02
【问题描述】:

我想问一下是否有一种方法可以像 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") 

【问题讨论】:

标签: c#


【解决方案1】:

你也可以在 C# 中构造一个数组:

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

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

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

【讨论】:

  • 我发现正则表达式很方便......现在改变我的条件:D。非常感谢
【解决方案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
}

【讨论】:

    【解决方案3】:

    嗯:

    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)
    {
    
    }
    

    【讨论】:

      【解决方案4】:

      是的,把它们放在一个数组中,然后简单地做一个包含

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

      而不是

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

      【讨论】:

        【解决方案5】:

        您可以从列表中检查,您可以使用它来查找列表中的任何文档类型:

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

        【讨论】:

          【解决方案6】:

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

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

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

          请注意,您可以使用在其他答案中找到的技术(例如 .Contains())并将其放在 return 方法中,它的工作原理相同:) 我要指出的想法是提取您的 @ 987654323@ 在一个方法中,所以你以后可以在任何地方这样做:

          if (IsDoctypeValid(docType)){
          
          }
          

          它超级小而且超级可读。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-16
            • 1970-01-01
            • 2022-09-28
            • 2017-08-11
            • 2020-01-09
            • 2014-01-27
            • 1970-01-01
            • 2013-12-23
            相关资源
            最近更新 更多