public void MaybeSupportsMultiLevelChaining() { var items = GetTestItems(); var maybe1 = new Maybe <IEnumerable <TestGrandParentItem> >(items); Func <IEnumerable <TestGrandParentItem>, TestGrandParentItem> chainFunc1 = sequence => sequence.FirstOrDefault(i => i.Id == 1); Func <TestGrandParentItem, TestParentItem> chainFunc2 = i => i.Items.FirstOrDefault(p => p.Id == 11); Func <TestParentItem, TestChildItem> chainFunc3 = i => i.Items.FirstOrDefault(); var resultMaybe = maybe1 .Chain(chainFunc1) .Chain(chainFunc2) .Chain(chainFunc3); Assert.IsTrue(resultMaybe.HasValue); Assert.AreEqual(111, resultMaybe.Value.Id); }
public void MaybeSupportsChaining() { var parent = new TestParentItem { Id = 111, Items = new List <TestChildItem> { new TestChildItem { Id = 1 }, new TestChildItem { Id = 2 }, new TestChildItem { Id = 3 }, new TestChildItem { Id = 4 }, new TestChildItem { Id = 5 }, new TestChildItem { Id = 6 }, } }; var maybe = new Maybe <TestParentItem>(parent); Func <TestParentItem, Maybe <TestChildItem> > chainFunc = p => { return(new Maybe <TestChildItem>(p.Items.FirstOrDefault(i => i.Id == 2))); }; var resultMaybe = maybe.Chain(chainFunc); Assert.IsTrue(resultMaybe.HasValue); }