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); }
private Type GetSystemType(IType type) { if (type is ExternalType) { return(((ExternalType)type).ActualType); } ArrayType arrayType = type as ArrayType; if (arrayType != null) { Type elementType = GetSystemType(arrayType.GetElementType()); return(Array.CreateInstance( elementType, new int[arrayType.GetArrayRank()]).GetType()); } return(null); }