我真的不知道枚举列表,但经过一些研究后我发现这个列表可能有助于解决我的问题。所以我的设置中有一个名为strGrades的字符串,它是我手动更新的一系列字符串。范围是0155-0160,0271-0388,0455-0503,0588-687。我基本上想要做的是找到不在此成绩列表中的值(例如0161,0389,0504-0587 ...)
所以我提出了一个功能,可以让我在等级范围内获得每场比赛:
public static List<GradeRange> GetValidGrades()
{
MatchCollection matches= Regex.Matches(Settings.Default.productRange,
Settings.Default.srGradeRange);
List<GradeRange> ranges= new List<GradeRange();
if(matches.Count >0)
{
foreach (Match match in matches)
{
ranges.Add(new GradeRange() 23 {
Start= int.Parse(match.Groups["Start"].Value),
Stop= int.Parse(match.Groups["Stop"].Value)
});
}
}
return ranges;
}
这是等级范围等级
public class GrandRange
{
public int Start{get; set;)
public int Stop {get; set; )
}
所以上面的函数可以捕获我的开始值和结束值,任何人都可以帮我把它放到一个列表中,我可以找到超出范围值的值,我只需要一个起点。非常感谢!
答案 0 :(得分:3)
您可以使用custom extension method that creates .Between和Where
var myFilteredList = list.Where(x=>!myValue.Between(x.Start, x.Stop, true));
这不是最有效的答案,但是如果你需要一个不在某些范围之间的所有数字的列表,那么你可以这样做:
var missingNumbers = new List<int>();
var minStop = list.OrderBy(x=>x.Stop).Min().Stop;
var maxStart = list.OrderBy(x=>x.Start).Max().Start;
Enumerable.Range(minStop, maxStart).ToList()
.ForEach(x=>
{
if(!x.Between(x.Start, x.Stop, true))
missingNumbers.Add(x);
}
);
答案 1 :(得分:0)
这应该让你开始
var strings = "0155-0160, 0271-0388, 0455-0503, 0588-687";
var splitStrings = strings.Split(char.Parse(","));
var grads = new List<GrandRange>();
foreach (var item in splitStrings) {
var splitAgain = item.Split(char.Parse("-"));
var grand = new GrandRange
{
Start = int.Parse(splitAgain[0]),
Stop = int.Parse(splitAgain[1])
};
grads.Add(grand);
}
}