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

时间:2015-07-24 10:47:14

标签: c#

我必须以简短而智能的方式实现一个非常大的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")

小而聪明的方式

6 个答案:

答案 0 :(得分:5)

如何在hl中添加所有List<string>字符串,并与AnyContains一起检查;

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

Jon警告说,如果你的字符串与状态不匹配,这将返回true,选择

if(list.Contains(seg.status))

代替。

答案 1 :(得分:2)

我会将它们放入HashSet:

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

您可以尝试这样

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

If(segList.contains(seg.status))

答案 4 :(得分:0)

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

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"))

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

答案 5 :(得分:0)

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

sudo apt-get install python3-matplotlib

所以在你的情况下:

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"));
}