Shortest way to check for null and assign another value if not

C#.NetNullVariable Assignment

C# Problem Overview


I am pulling varchar values out of a DB and want to set the string I am assigning them to as "" if they are null. I'm currently doing it like this:

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

There seems like there should be a way to do this in a single line something like:

this.approved_by = "" || planRec.approved_by.toString();

However I can't find an optimal way to do this. Is there a better way or is what I have the best way to do it?

C# Solutions


Solution 1 - C#

Try this:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

You can also use the null-coalescing operator as other have said - since no one has given an example that works with your code here is one:

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

But this example only works since a possible value for this.approved_by is the same as one of the potential values that you wish to set it to. For all other cases you will need to use the conditional operator as I showed in my first example.

Solution 2 - C#

You are looking for the C# coalesce operator: ??. This operator takes a left and right argument. If the left hand side of the operator is null or a nullable with no value it will return the right argument. Otherwise it will return the left.

var x = somePossiblyNullValue ?? valueIfNull;

Solution 3 - C#

Starting with C# 8.0, you can use the ??= operator to replace the code of the form

if (variable is null)
{
    variable = expression;
}

with the following code:

variable ??= expression;

More information is here

Solution 4 - C#

The coalesce operator (??) is what you want, I believe.

Solution 5 - C#

My guess is the best you can come up with is

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();

Of course since you're hinting at the fact that approved_by is an object (which cannot equal ""), this would be rewritten as

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();

Solution 6 - C#

With C#6 there is a slightly shorter way for the case where planRec.approved_by is not a string:

this.approved_by = planRec.approved_by?.ToString() ?? "";

Solution 7 - C#

Use the C# coalesce operator: ??

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;

Solution 8 - C#

To extend @Dave's answer...if planRec.approved_by is already a string

this.approved_by = planRec.approved_by ?? "";

Solution 9 - C#

To assign a non-empty variable without repeating the actual variable name (and without assigning anything if variable is null!), you can use a little helper method with a Action parameter:

public static void CallIfNonEmpty(string value, Action<string> action)
{
    if (!string.IsNullOrEmpty(value))
        action(value);
}

And then just use it:

CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);

Solution 10 - C#

The accepted answer was correct in time, when it was given.

For people still finding this question: Today you can use the ??= Operator.

e.g:

private string _test = null;

private void InitIfNull(){
 _test ??= "Init";
}

Solution 11 - C#

You can also do it in your query, for instance in sql server, google ISNULL and CASE built-in functions.

Solution 12 - C#

I use extention method SelfChk

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}

Then use like

string a = null;
"A".SC(ref a);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSplashlinView Question on Stackoverflow
Solution 1 - C#Andrew HareView Answer on Stackoverflow
Solution 2 - C#JaredParView Answer on Stackoverflow
Solution 3 - C#nzrytmnView Answer on Stackoverflow
Solution 4 - C#Dave WardView Answer on Stackoverflow
Solution 5 - C#Dmitri NesterukView Answer on Stackoverflow
Solution 6 - C#MalcolmView Answer on Stackoverflow
Solution 7 - C#Ramgy BorjaView Answer on Stackoverflow
Solution 8 - C#Paul AlexanderView Answer on Stackoverflow
Solution 9 - C#Jack MillerView Answer on Stackoverflow
Solution 10 - C#SteavView Answer on Stackoverflow
Solution 11 - C#user133371View Answer on Stackoverflow
Solution 12 - C#Ali HumayunView Answer on Stackoverflow