une liste d'objets avec Je dois valider si aucune des dates se chevauche.
Je ne sais pas si entrée non valide forte> P> ID code>,
dentesteart code> et
datefin) code>. p>
Ce que j'ai besoin de faire h1>
chevauchement code> passe la bonne signification ici, voici quelques exemples: p>
myList.Any(
x => x.Id == item.Id
&&
(
(
item.DateStart <= x.DateStart
&&
item.DateFinish > x.DateStart
&&
item.DateFinish <= x.DateFinish
)
||
(
item.DateStart >= x.DateStart
&&
item.DateStart < x.DateFinish
&&
item.DateFinish > x.DateFinish
)
||
(
item.DateStart <= x.DateStart
&&
item.DateFinish >= x.DateFinish
)
)
)
3 Réponses :
une version rapide et sale. Pas très performant que sur de grands ensembles. Mais peut être amélioré sur.
https://dotnetfiddle.net/widget/pen2lm p>
J'ai essayé de refléter vos cas, mais je suggérerais d'écrire des tests d'unités pour tester pleinement tous vos scénarios. puis a, au moins un extrait de code de lecture légèrement plus facile à lire / écrémé qui semble fonctionner parfaitement: p> bars.Where(outer => ((outer.Start <= w.Start && outer.End >= w.Start)
J'utiliserais le code suivant:
static bool IsOverlapping(IEnumerable<Range> list) { Range previousRange = null; foreach (var currentRange in list.OrderBy(x => x.DateStart).ThenBy(x => x.DateFinish)) { if (currentRange.DateStart > currentRange.DateFinish) return true; if (previousRange?.DateFinish > currentRange.DateStart) return true; previousRange = currentRange; } return false; }