Jeśli używasz warunkowy (potrójny) operator kompilator potrzebuje niejawna konwersja między obu typów, inaczej dostaniesz wyjątek.
więc można go naprawić, oddając jedną zarówno System.Object
:
planIndexParameter.Value = (AgeItem.AgeIndex== null) ? DBNull.Value : (object) AgeItem.AgeIndex;
Ale ponieważ wynik nie jest naprawdę ładna i zawsze trzeba pamiętać to odlew, można użyć takiego metodę rozszerzenia zamiast:
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;
}
Następnie można użyć tego kodu zwięzły:
planIndexParameter.Value = AgeItem.AgeIndex.GetDBNullOrValue();
Trzeba rzucić AgeItem.AgeIndex sprzeciwić myślę ... http://stackoverflow.com/questions/202271/why- is-this-code-invalid-in-c (btw, dlaczego '==' na końcu trzeciej linii?) – Greg