如何相互验证范围列表?

Iva*_*ono 2 c# fluentvalidation

有这样一个类:

public class MyRange
{
    public int From {get; set;}
    public int To {get; set;}

    public MyRange(int from, int to)
    {
        From = from;
        To = to;
    }
}
Run Code Online (Sandbox Code Playgroud)

并具有List<MyRange>以下值:

var list = new List<MyRange>();
list.Add(new MyRange(1, 1000));
list.Add(new MyRange(1001, 2000));
list.Add(new MyRange(50, 1500));
list.Add(new MyRange(1900, 2900)); 
Run Code Online (Sandbox Code Playgroud)

是否可以有一个FluentValidation规则来检查上述范围不重叠?(范围之间的差距是有效的)

das*_*ght 5

您可以通过对属性的范围进行排序From,然后检查To前一个元素的属性是否低于From当前元素的属性来完成此操作:

var ordered = list.OrderBy(r => r.From).ToList();
var isValid = ordered
    .Zip(ordered.Skip(1), (a, b) => new {Prior = a, Current = b})
    .All(p => p.Prior.To <= p.Current.From);
Run Code Online (Sandbox Code Playgroud)