Link to home
Start Free TrialLog in
Avatar of JDay2
JDay2

asked on

if else statement in c#

I have the following if statement but need to add else when the case 12,15,18,22 is not I only need to show the OutTracking and InTracking currently now it shows nothing if I have other than case 12,15,18,22.  I need to show without a hyperlink and plain text

[Rule("r100")]
        public void r100Implementation(string OutTracking, string OutTrackingAlias, string InTracking, string InTrackingAlias)
        {
            if (OutTracking != null)
                switch (OutTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:
                        // fedex
                        UpdateFieldValue("OutTrackingAlias", "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums="
                        + OutTracking
                        + "&clienttype=dotcom\" target='_blank'>"
                        + OutTracking
                        + "</a>");
                        break;
                    case 18:
                        // UPS
                        UpdateFieldValue("OutTrackingAlias", "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1="
                        + OutTracking
                        + "&clienttype=dotcom\" target='_blank'>"
                        + OutTracking
                        + "</a>");
                        break;
                }
                        
                                        
            if (InTracking != null)
                switch (InTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:
                        // fedex
                        UpdateFieldValue("InTrackingAlias", "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums="
                        + InTracking
                        + "&clienttype=dotcom\" target='_blank'>"
                        + InTracking
                        + "</a>");
                        break;
                    case 18:
                        // UPS
                        UpdateFieldValue("InTrackingAlias", "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1="
                        + InTracking
                        + "&clienttype=dotcom\" target='_blank'>"
                        + InTracking
                        + "</a>");
                        break;
                        // This is the placeholder for method implementation.
                }
        }
    }
}

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of AndyAinscow
AndyAinscow
Flag of Switzerland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Step 1: Refactor your code.

        public void r100Implementation(string OutTracking, string OutTrackingAlias, string InTracking, string InTrackingAlias)
        {
            const string IN_FEDEX = "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums={0}&clienttype=dotcom\" target='_blank'>{0}</a>";
            const string OUT_FEDEX = "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums={0}&clienttype=dotcom\" target='_blank'>{0}</a>";
            const string IN_UPS =  "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1={0}&clienttype=dotcom\" target='_blank'>{0}</a>";
            const string OUT_UPS = "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1={0}&clienttype=dotcom\" target='_blank'>{0}</a>";

            if (OutTracking != null)
                switch (OutTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:                        
                        UpdateFieldValue("OutTrackingAlias", string.Format(OUT_FEDEX, OutTracking));
                        break;
                    case 18:                        
                        UpdateFieldValue("OutTrackingAlias", string.Format(OUT_UPS, OutTracking));
                        break;
                }


            if (InTracking != null)
                switch (InTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:                        
                        UpdateFieldValue("InTrackingAlias", string.Format(IN_FEDEX, InTracking));
                        break;
                    case 18:                        
                        UpdateFieldValue("InTrackingAlias", string.Format(IN_UPS, InTracking));
                        break;
                        
                }
        }

Open in new window


Now we see that the constants are redundant:

        public void r100Implementation(string OutTracking, string OutTrackingAlias, string InTracking, string InTrackingAlias)
        {            
            const string FEDEX = "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums={0}&clienttype=dotcom\" target='_blank'>{0}</a>";            
            const string UPS = "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1={0}&clienttype=dotcom\" target='_blank'>{0}</a>";

            if (OutTracking != null)
                switch (OutTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:                        
                        UpdateFieldValue("OutTrackingAlias", string.Format(FEDEX, OutTracking));
                        break;
                    case 18:                        
                        UpdateFieldValue("OutTrackingAlias", string.Format(UPS, OutTracking));
                        break;
                }


            if (InTracking != null)
                switch (InTracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:                        
                        UpdateFieldValue("InTrackingAlias", string.Format(FEDEX, InTracking));
                        break;
                    case 18:                        
                        UpdateFieldValue("InTrackingAlias", string.Format(UPS, InTracking));
                        break;                        
                }
        }

Open in new window


Step 2: What are the parameters {In|Out}TrackingAlias for?
Step 3: I would rewrite it as
        private void R100Implementation_Subrule(string tracking, string trackingAlias, string url, out bool handled)
        {            
            handled = false;
            if (tracking != null)
                switch (tracking.Length)
                {
                    case 12:
                    case 15:
                    case 22:
                        UpdateFieldValue(trackingAlias, string.Format(url, tracking));
                        handled = true;
                        break;
                }
        }

        public void R100Implementation(string outTracking, string outTrackingAlias, string inTracking, string inTrackingAlias)
        {
            const string FEDEX = "<a href=\"https://www.fedex.com/fedextrack/?cntry_code=us&tab=1&tracknums={0}&clienttype=dotcom\" target='_blank'>{0}</a>";
            const string UPS = "<a href=\"http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_US&InquiryNumber1={0}&clienttype=dotcom\" target='_blank'>{0}</a>";
            bool handled = false;
            if (!handled)
            {
                R100Implementation_Subrule(outTracking, outTrackingAlias, FEDEX, out handled);
                R100Implementation_Subrule(inTracking, inTrackingAlias, FEDEX, out handled);
            }

            if (!handled)
            {
                R100Implementation_Subrule(outTracking, outTrackingAlias, UPS, out handled);
                R100Implementation_Subrule(inTracking, inTrackingAlias, UPS, out handled);
            }

            if (!handled)
            {
                // General fall back.
            }
        }

Open in new window


The keyword rule and the repeating code seems to like you should look into the strategy pattern and the chain of responsibility pattern.