private static void TestAssignability(Type a, Type b) { var aData = a.IsGenericParameter ? GenericTypeParameterData.FromType(a) : TypeData.FromType(a); var bData = b.IsGenericParameter ? GenericTypeParameterData.FromType(b) : TypeData.FromType(b); if (aData == null || bData == null) { Assert.Inconclusive("Unable to get one of the types"); } if (a.IsImplicitlyAssignableFrom(b)) { Assert.IsTrue(aData.IsAssignableFromNew(bData), string.Format("The type should be assignable: {0} <- {1}", aData.Name, bData.Name)); } else { Assert.IsFalse(aData.IsAssignableFromNew(bData), string.Format("The type should not be assignable: {0} <- {1}", aData.Name, bData.Name)); } if (b.IsImplicitlyAssignableFrom(a)) { Assert.IsTrue(bData.IsAssignableFromNew(aData), string.Format("The type should be assignable: {0} <- {1}", bData.Name, aData.Name)); } else { Assert.IsFalse(bData.IsAssignableFromNew(aData), string.Format("The type should not be assignable: {0} <- {1}", bData.Name, aData.Name)); } }
public static GenericTypeParameterCollection GetGenericParameters(IEnumerable <GenericParameter> genericArguments, MemberDataBase declaringMember) { return(new GenericTypeParameterCollection(genericArguments.Select(a => { var genericParameter = GenericTypeParameterData.FromType(a); if (declaringMember != null) { Debug.Assert(genericParameter.GenericDeclaringMember == null, "The GenericDeclaringMember should not be set twice."); genericParameter.GenericDeclaringMember = declaringMember; } return genericParameter; }))); }