当前位置: 首页 > 编程语言 > C#

C#-RangeIntersectionWhenEndpointIsEmpty(Infinity)Share

时间:2023-04-11 02:23:11 C#

null,theyworkfine:publicstaticboolIntersects(thisRangefirst,Rangesecond,IComparercomparer){returncomparer.Compare(first.Start,second.End)=0;}publicstaticRangeGetIntersectionWith(thisRangefirst,Rangesecond,IComparercomparer){//如果任何范围为null或者它们根本不相交,则返回nullif(first==null||second==null||!Intersects(first,second,comparer))返回空值;varstart=comparer.Compare(first.Start,second.Start)0?second.End:first.End;返回Range.Create(开始,结束);我现在的问题是我希望它们完全支持空端点。空端点意味着范围在该方向上趋于无穷大。我希望通过的两个测试,例如:[Test]publicvoidIntersects_Intersecting_OneEndsWithNull(){vara=Range.Create("a","k");varb=Range.Create("c",null);断言.That(a.Intersects(b),Is.True);Assert.That(b.Intersects(a),Is.True);}[测试]publicvoidGetIntersectionWith_Intersecting_OneStartingAndOneEndingWithNull(){vara=Range.Create(null,"k");varb=Range.Create("f",null);varexpected=Range.Create("f","k");Assert.That(a.GetIntersectionWith(b),Is.EqualTo(预期));Assert.That(b.GetIntersectionWith(a),Is.EqualTo(expected));它不能立即工作的原因是null被认为比一切都少。但是这里null必须被认为比一切都大。知道如何以好的方式解决这个问题吗?我想我会先检查null并做一些特殊的事情或制作某种IComparer包装器......但我无法弄清楚它们如何或必须工作。必须记住,它也可以被赋予任何类型的比较器,因此从技术上讲,范围可以在相反的方向,只要给定的比较器当然考虑到这一点(在实际代码中,如果一开始我会抛出异常)根据给定比较器的末尾)。无论如何,我在这里有点迷路:P我认为您需要在比较中考虑空值。这不会有帮助吗?publicstaticboolIntersects(thisRangefirst,Rangesecond,IComparercomparer){return(ReferenceEquals(first.Start,null)||ReferenceEquals(second.End,null)||comparer.Compare(first.Start,second.End)=0);好的,第二部分。将start和end设置为null,并且仅在两者都不为null的情况下才设置为start/end值。以上就是C#学习教程的全部内容:C#:端点为空(无穷大)时的范围交集。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticRangeGetIntersectionWith(thisRangefirst,Rangesecond,IComparercomparer){//返回null,如果有range为空或者如果它们根本不相交开始;如果(ReferenceEquals(first.Start,null))start=second.Start;elseif(ReferenceEquals(second.Start,null))start=first.Start;否则开始=比较器。比较(第一个。开始,第二个。开始)0?second.End:first.End;返回Range.Create(开始,结束);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢