Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a nullable to a non-nullable variable in C#/dotnet

Tags:

c#

.net-core

This sounds trivial but I am having challenge. I cannot convert a nullable to a non-nullable value:

if (caseObj.SyncDate != null)
    caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate);

Where my caseObj.SyncDate is defined as:

public DateTimeOffset? SyncDate {get;set;}

And my getFormattedDateTime is:

    public static string getFormattedDateTime(DateTimeOffset dateTimeOffset) {

        string returnDate = null;

        if (dateTimeOffset != null) {
            returnDate = dateTimeOffset.ToString("yyyy-MM-dd HH:mm:ss.fffzzz", CultureInfo.InvariantCulture);
        }
        return returnDate;
    }

I read this and tried:

        if (caseObj.SyncDate != null)
            caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate!):

Which seems strange since I saw this link to Microsoft documentation which states:

Sometimes you must override a warning when you know a variable isn't null, but the compiler determines its null-state is maybe-null. You use the null-forgiving operator ! following a variable name to force the null-state to be not-null. For example, if you know the name variable isn't null but the compiler issues a warning, you can write the following code to override the compiler's analysis:

But that didn't seem to work. I have read this post (which I thought was focused enough) and this one for which the marked solution was not to convert from nullable to null.

I have tried this as well:

        if (caseObj.SyncDate != null) {
            DateTimeOffset dto = (DateTimeOffset) caseObj.SyncDate;
            caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(dto);
        }

But get this:

Argument 1: cannot convert from 'System.DateTimeOffset?' to 'System.DateTime'

Which is strange because I am not trying to convert from System.DateTimeOffset? to System.DateTime. I am trying to convert System.DateTimeOffset? to DateTimeOffset.

I'm running dotnet core on a Mac (version 6.0.201). There seem to be some long complicated answers, but I assume there is a simple way to do this that I'm missing.

like image 288
lcj Avatar asked Sep 11 '25 06:09

lcj


1 Answers

If I get you right - you might want something like this:

if (caseObj.SyncDate.HasValue)
    caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate.Value);
like image 119
Arthur Edgarov Avatar answered Sep 13 '25 21:09

Arthur Edgarov