public static Type GetDataType(DataType dataType) { Type slotType = DataTypeUtils.GetSlotDataType(dataType); if (dataType.IsSlotes) { return(slotType); } return(typeof(Data <>).MakeGenericType(slotType)); }
public static Type GetSlotDataType(DataType dataType) { if (dataType.IsPrimitive) { return(dataType.PrimitiveType); } Type[] slotTypes = new Type[dataType.TypesCount]; for (int i = 0; i < slotTypes.Length; i++) { slotTypes[i] = DataTypeUtils.GetSlotDataType(dataType[i]); } if (dataType.IsSlotes) { return(GetDataType(slotTypes)); } if (dataType.IsArray) { return(slotTypes[0].MakeArrayType()); } if (dataType.IsList) { return(typeof(List <>).MakeGenericType(slotTypes[0])); } if (dataType.IsDictionary) { return(typeof(Dictionary <,>).MakeGenericType(slotTypes[0], slotTypes[1])); } if (dataType.IsKeyValuePair) { return(typeof(KeyValuePair <,>).MakeGenericType(slotTypes[0], slotTypes[1])); } throw new NotSupportedException(dataType.ToString()); }