// Interface[] -> Class[]
yield return new object[] { new NonGenericInterface1[10], 0, new NonGenericClass1[10], 0, 10, new NonGenericClass1[10] };
+
+ // object[] -> Int32Enum[] when values are all Int32Enum
+ yield return new object[] { new object[] { Int32Enum.Case3 }, 0, new Int32Enum[1], 0, 1, new Int32Enum[] { Int32Enum.Case3 } };
}
public static IEnumerable<object[]> Copy_Array_UnreliableConversion_CanPerform_TestData()
Type src_type = sourceArray.GetType().GetElementType()!;
Type dst_type = destinationArray.GetType().GetElementType()!;
+ Type dst_elem_type = dst_type;
bool dst_type_vt = dst_type.IsValueType && Nullable.GetUnderlyingType(dst_type) == null;
bool src_is_enum = src_type.IsEnum;
{
object srcval = sourceArray.GetValueImpl(source_pos + i);
- if (!src_type.IsValueType && dst_is_enum)
+ if (dst_type_vt && (srcval == null || (src_type == typeof(object) && !dst_elem_type.IsAssignableFrom (srcval.GetType()))))
throw new InvalidCastException(SR.InvalidCast_DownCastArrayElement);
- if (dst_type_vt && (srcval == null || (src_type == typeof(object) && srcval.GetType() != dst_type)))
- throw new InvalidCastException();
-
try
{
destinationArray.SetValueRelaxedImpl(srcval, dest_pos + i);