Question

I want to check passed value is null or datetime value using ternary operator in c#?

I tried like this

fromDate == null ? null : Convert.ToDateTime(fromDate)

getting error:

type of conditional expression cannot be determined

I want to check whether variable fromDate is null or having date time value ?

variable fromDate is coming from Querystring and type of string.

Was it helpful?

Solution

From ?: Operator:

Either the type of first_expression and second_expression must be the same, or an implicit conversion must exist from one type to the other.

condition ? first_expression : second_expression;

Convert.ToDateTime returns DateTime and there is no implicit conversion between null and DateTime. And the conditional operator is an expression and that needs a return type.

One option seems logical to me using DateTime.TryParse (which returns boolean) as a first expression and use another boolean (true or false) as a second expression. Damiths' answer seems logical.

Or instead you can use nullable DateTime like DateTime?

DateTime? foo;

if(foo.HasValue)
{
   //Nullable DateTime has a value..
}

OTHER TIPS

if you have string value for fromDate do as below

DateTime dt;

bool isValidDate =  String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt); 

if you know the datetime format/formats which your input having you better use DateTime.TryParseExact method

if fromDate is DateTime, then simple you can check as below

fromDate.HasValue

you don't need ?: Operator

The problem is that Convert.ToDateTime(fromDate) is of type DateTime, which cannot accept a null value, that is why this code won't work in this form. You have two choices to make. Either change it to regular if:

if(fromDate != null)
{
        Convert.ToDateTime(fromDate)
}

Or cast DateTime to nullable DateTime:

    fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)

Ternary operator in C# needs both values to be of the same type and it is explained here.

romDate == null ? null : Convert.ToDateTime(fromDate)

null and Convert.ToDateTime(fromDate) haven't common type. Compiler must be able to cast both expressions in canditional operator to same type.

I hope it will help you

   string format = "ddd dd MMM h:mm tt yyyy";
    DateTime dateTime;

    fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
        DateTimeStyles.None, out dateTime))?dateTime:null;

you must use String.IsNullOrEmpty to check if fromDate is null like this:

DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)

It looks like the main problem is that you are trying to assign null to a DateTime

DateTime is a structure and not a reference type so this can't be done.

Either use a nullable DateTime (DateTime?) or a specific value to indicate null, such as DateTime.MinValue

Have a look here for an example: http://www.dotnetperls.com/nullable-datetime

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top