Если вы используете условную (троичный) оператор компилятор нуждается неявное преобразование между обоими типами, иначе вы получите исключение.
Так что вы можете это исправить путем литья один из обоих к System.Object
:
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : (object) AgeItem.AgeIndex;
Но так как результат не очень красиво, и вы всегда должны помнить этот кастинг, вы могли бы использовать такой метод расширения вместо:
public static object GetDBNullOrValue<T>(this T val)
{
bool isDbNull = true;
Type t = typeof(T);
if (Nullable.GetUnderlyingType(t) != null)
isDbNull = EqualityComparer<T>.Default.Equals(default(T), val);
else if (t.IsValueType)
isDbNull = false;
else
isDbNull = val == null;
return isDbNull ? DBNull.Value : (object) val;
}
Затем вы можете использовать этот краткий код:
planIndexParameter.Value = AgeItem.AgeIndex.GetDBNullOrValue();
Вы должны бросить AgeItem.AgeIndex возразить я думаю ... http://stackoverflow.com/questions/202271/why- is-this-code-invalid-in-c (btw, почему '==' в конце 3-й строки?) – Greg