- if (source_type != TypeManager.decimal_type) {
- AddConversionOperators (ops, source, target_type, look_for_explicit,
- Expression.MethodLookup (container_type, source_type, "op_Implicit", Location.Null) as MethodGroupExpr);
- if (look_for_explicit) {
- AddConversionOperators (ops, source, target_type, look_for_explicit,
- Expression.MethodLookup (
- container_type, source_type, "op_Explicit", Location.Null) as MethodGroupExpr);
- }
- }
+ if (TypeManager.IsNullableType (source_type)) {
+ // No implicit conversion S? -> T for non-reference types
+ if (implicitOnly && !TypeManager.IsReferenceType (target_type) && !TypeManager.IsNullableType (target_type))
+ return null;