private Type GetSystemType(IType type)
{
// Get system type from external types
if (type is ExternalType)
{
return(((ExternalType)type).ActualType);
}
// Get system array types from arrays of external types
ArrayType arrayType = type as ArrayType;
if (arrayType != null)
{
Type elementType = GetSystemType(arrayType.GetElementType());
int rank = arrayType.GetArrayRank();
// Calling MakeArrayType(1) gives a multi-dimensional array with 1 dimensions,
// which is (surprisingly) not the same as calling MakeArrayType() which gives
// a single-dimensional array
return(rank == 1 ? elementType.MakeArrayType() : elementType.MakeArrayType(rank));
}
// This shouldn't happen since we only call GetSystemType on external types or arrays of such
return(null);
}