Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# alternative to a bunch of else if statements based on hierarchy

I apologize for the vague title but I wasn't really sure the best way to describe it.

I am writing a C# transform script in SSIS. The goal is to take in 5 values which are decimals, and I need to receive the first value out of 5 that is not null, in a predetermined order as you can see by the order of the else if statements. So as you can see I want to grab the MM value if it has one, if not then the PRE, then DD, PT, etc. You'll also see I just assign a little varchar label value to show which value came back as well.

Is there a cleaner/easier way of doing this that doesn't include a bunch of if/else if blocks? I'm just looking to clean it up.

current code below (Thanks for any advice!):

public Tuple<decimal?,string> getCurrentRec(Decimal? PT, Decimal? DD, 
Decimal? PRE, Decimal? MM)
{
    string ptlabel = "PT";
    string ddlabel = "DD";
    string prelabel = "PRE";
    string MMLabel = "MM";
    string curlabel;
    decimal? currentval;

    if (MM.HasValue)
    {
        curlabel = MMLabel;
        currentval = MM.Value;
    }

    else if (PRE.HasValue)
    {
        curlabel = prelabel;
        currentval = PRE.Value;
    }

    else if (DD.HasValue)
    {
        curlabel = ddlabel;
        currentval = DD.Value;
    }
    else if (PA.HasValue)
    {
        curlabel = ptlabel;
        currentval = PT.Value;
    }
    else
    {
        curlabel = "";
        currentval = (decimal?)null;
    }

    return Tuple.Create(currentval, curlabel);
}
like image 913
user3494110 Avatar asked Dec 08 '25 21:12

user3494110


1 Answers

One possible way:

var match = new[] {
    new {v = MM, n = nameof(MM) },
    new {v = PRE, n = nameof(PRE) },
    new {v = DD, n = nameof(DD) },
    new {v = PT, n = nameof(PT) },
}.FirstOrDefault(c => c.v != null);
return Tuple.Create(match?.v, match?.n ?? "");

You create array of anonymous types with 2 properties: v for value of your decimal and n for corresponding label. Items in array should be in correct order. Then you use FirstOrDefault to find first element which has non null value.

like image 156
Evk Avatar answered Dec 11 '25 10:12

Evk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!