public IType MakeArrayType() { if (arrayType == null) { Type t = clrType.MakeArrayType(); arrayType = new CLRType(t, appdomain); ((CLRType)arrayType).elementType = this; ((CLRType)arrayType).IsArray = true; } return(arrayType); }
public IType MakeArrayType(int rank) { if (arrayTypes == null) { arrayTypes = new Dictionary <int, IType>(); } IType atype; if (!arrayTypes.TryGetValue(rank, out atype)) { Type t = rank > 1 ? clrType.MakeArrayType(rank) : clrType.MakeArrayType(); atype = new CLRType(t, appdomain); ((CLRType)atype).elementType = this; ((CLRType)atype).IsArray = true; ((CLRType)atype).ArrayRank = rank; arrayTypes[rank] = atype; } return(atype); }
public IType MakeGenericInstance(KeyValuePair <string, IType>[] genericArguments) { lock (this) { if (genericInstances == null) { genericInstances = new List <CLRType>(); } foreach (var i in genericInstances) { bool match = true; for (int j = 0; j < genericArguments.Length; j++) { if (i.genericArguments[j].Value != genericArguments[j].Value) { match = false; break; } } if (match) { return(i); } } Type[] args = new Type[genericArguments.Length]; for (int i = 0; i < genericArguments.Length; i++) { args[i] = genericArguments[i].Value.TypeForCLR; } Type newType = clrType.MakeGenericType(args); var res = new CLRType(newType, appdomain); res.genericArguments = genericArguments; genericInstances.Add(res); return(res); } }