Operator '??' cannot be applied to operands of type 'string' and 'System.DBNull'

StackOverflow https://stackoverflow.com/questions/4153009

  •  08-10-2019
  •  | 
  •  

سؤال

I have the following C# code:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);

But it throws the following compilation error:

Operator ?? cannot be applied to operands of type string and System.DBNull

Why doesn't the compiler allow this syntax?

هل كانت مفيدة؟

المحلول

Both operands need to be object. Use explicit cast:

(object)table.Value ?? DBNull.Value;

نصائح أخرى

There is no automatic conversion between string and System.DBNull and so you need to specify the type you want explicitly by adding a cast to object:

sqlCommandObject.Parameters.AddWithValue("@Parameter",
                                         table.Value ?? (object)DBNull.Value);

It's because there is no implicit conversion between string and System.DBNull.

Instead of using DBNull.Value, you can use Convert.DBNull:

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? Convert.DBNull);

I believe behind the scenes it is basically doing the same/similar thing as mentioned in other examples (i.e. casting DBNull to object), but it makes it a little simpler/conciser.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top