我必须以简短而智能的方式实现一个非常大的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")
小而聪明的方式
答案 0 :(得分:5)
如何在hl
中添加所有List<string>
字符串,并与Any
和Contains
一起检查;
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"));
}