Wednesday, January 2, 2019

How to Avoid If - else-if or nested IFELSE

using Rule or by defining the Rules in an array
example below

 var carryOverRules = new[]
            {
                //Full Time
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.FullTime==true && x.MaxCarryOver403020==true),
                    Value = 40.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.FullTime==true && x.MaxCarryOver604530==true),
                    Value = 60.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.FullTime==true && x.MaxCarryOver806040==true),
                    Value = 80.00m
                },

                // PartTime 75
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime75==true && x.MaxCarryOver403020==true),
                    Value = 30.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime75==true && x.MaxCarryOver604530==true),
                    Value = 45.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime75==true && x.MaxCarryOver806040==true),
                    Value = 60.00m
                },

                 // PartTime 50
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime50==true && x.MaxCarryOver403020==true),
                    Value = 20.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime50==true && x.MaxCarryOver604530==true),
                    Value = 30.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => x.PartTime50==true && x.MaxCarryOver806040==true),
                    Value = 40.00m
                },
                new
                {
                    Rule = (Func<dynamic, bool>) (x => true),
                    Value = 0.00m // Default Rule value if not match with any criteria
                },
            };       
            carryOver = carryOverRules.FirstOrDefault(x =>x.Rule(timeOffFlags)).Value;

No comments:

Post a Comment