in src/lib/Microsoft.Fx.Portability.Cci/TypeExtensions.cs [462:498]
public static ITypeReference UnWrap(this ITypeReference reference)
{
if (reference is IPointerTypeReference pointer)
{
return pointer.TargetType.UnWrap();
}
if (reference is IArrayTypeReference array)
{
return array.ElementType.UnWrap();
}
if (reference is IModifiedTypeReference modified)
{
return modified.UnmodifiedType.UnWrap();
}
if (reference is ISpecializedNestedTypeReference specialized)
{
return specialized.UnspecializedVersion.UnWrap();
}
if (reference is IGenericTypeInstanceReference instantiation)
{
return instantiation.GenericType.UnWrap();
}
Contract.Assert(reference is INamedTypeReference
|| reference is INestedTypeReference
|| reference is INamespaceTypeReference
|| reference is IGenericTypeParameterReference
|| reference is IGenericMethodParameterReference
|| reference is IFunctionPointerTypeReference,
string.Format(CultureInfo.CurrentCulture, LocalizedStrings.UnexpectedTypeReference, reference?.GetType()?.FullName ?? "null"));
return reference;
}