448 {
450 {
451 bool flag = typeFrom.IsNullableType();
452 bool flag2 = typeTo.IsNullableType();
453 Type nonNullableType = typeFrom.GetNonNullableType();
454 Type nonNullableType2 = typeTo.GetNonNullableType();
456 {
457 il.EmitCastToType(typeFrom, typeTo);
458 }
459 else if (flag || flag2)
460 {
461 il.EmitNullableConversion(typeFrom, typeTo, isChecked, locals);
462 }
463 else if ((!typeFrom.IsConvertible() || !typeTo.IsConvertible()) && (nonNullableType.IsAssignableFrom(nonNullableType2) || nonNullableType2.IsAssignableFrom(nonNullableType)))
464 {
465 il.EmitCastToType(typeFrom, typeTo);
466 }
467 else if (typeFrom.IsArray && typeTo.IsArray)
468 {
469 il.EmitCastToType(typeFrom, typeTo);
470 }
471 else
472 {
473 il.EmitNumericConversion(typeFrom, typeTo, isChecked);
474 }
475 }
476 }
static bool IsLegalExplicitVariantDelegateConversion(Type source, Type dest)
static bool AreEquivalent(Type t1, Type t2)