protected void UpdateOriginalGenericArguments(ref int nullableFlagsIndex) { if (_originalGenericArguments == null) { lock (this) { if (_originalGenericArguments == null) { var arguments = new List <CachedType>(); #if NET40 foreach (var type in OriginalType.GetGenericArguments()) #else foreach (var type in OriginalType.GenericTypeArguments) #endif { arguments.Add(GetCachedType(type, ref nullableFlagsIndex)); } if (arguments.Count == 0) { var elementType = OriginalType.GetElementType(); if (elementType != null) { _elementType = GetCachedType(elementType, ref nullableFlagsIndex); } } _originalGenericArguments = arguments.ToArray(); _isNullableType = OriginalType.Name == "Nullable`1"; _genericArguments = _isNullableType ? arguments[0]._originalGenericArguments : _originalGenericArguments; _type = _isNullableType ? ((IEnumerable)_originalGenericArguments).Cast <CachedType>().First().OriginalType : OriginalType; } } } }
// public override TypeReference[] GenericArguments // { // get // { // return OriginalType.GenericArguments; // } // } // // public override GenericParameter[] GenericParameters // { // get // { // return OriginalType.GenericParameters; // } // } public override TypeReference GetElementType() { return(OriginalType.GetElementType()); }