如何将大IF条件转换为小IF条件

本文关键字:条件 IF 转换 | 更新日期: 2023-09-27 18:04:22

我必须以一种简短而聪明的方式实现一个非常大的If和else语句。

例如:

If(seg.status =="hl"||seg.status =="hl2"||seg.status =="hl3"||seg.status =="hl4"||seg.status =="hl4"||seg.status =="hl5"||seg.status =="hl6"||seg.status =="hl7")

如何将大IF条件转换为小IF条件

如何将所有hl字符串添加到List<string>中,并检查AnyContains;

var list = new List<string>(){"hl", "hl1", "hl2", ...};
if(!list.Any(seg.status.Contains))

正如Jon警告的那样,如果字符串与status不匹配,这将返回true,选择

if(list.Contains(seg.status))

我会将它们放入HashSet:

var keywords = new HashSet<String>(StringComparer.InvariantCultureIgnoreCase)
               {
                  "h1", "hl2", ...
               }

然后检查它是否包含给定的单词:

if(keywords.Contains(seg.status))
{
   // ToDo: What shall happen?
}

您也可以使用regex:

Regex.IsMatch(seg.status, @"hl'd*")

你可以这样试试

var segList = new List<string>(){"hl", "hl1", "hl2","hl4", "hl15", "hl6","hl7"};
If(segList.contains(seg.status))

你在很多地方都这样做吗?如果是这样,您可以编写一个小字符串扩展类,使代码更整洁:

public static class StringExt
{
    public static bool MatchesAnyOf(this string text, params string[] targets)
    {
        return targets.Any(target => string.Compare(text, target, StringComparison.OrdinalIgnoreCase) == 0);
    }
}

你可以这样称呼它:

if (seg.status.MatchesAnyOf("hl", "hl1", "hl2","hl4", "hl15", "hl6","hl7"))

(如果需要区分大小写的比较,请从string.Compare()中删除StringComparison.OrdinalIgnoreCase参数)

如果您对测试变量命名的模式有信心:

using System.Text.RegularExpressions;
Regex re = new Regex("hl[1|2|3|4|5|6|7]");
string[] test=  {"hl1","hl2","hl3","hl4","hl5","hl6","hl7","hlasdfasdf"};
for(int i = 0; i < test.Length; i++){
    System.Console.WriteLine(test[i] + ":" + (re.IsMatch(test[i])?"match":"does not match"));
}

所以在你的例子中:

   if(re.IsMatch(seg.status)){ //...  }