Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }