private bool IsValidExtensionType(IType actualType, IType extensionType, IExtensionEnabled extension) { if (TypeCompatibilityRules.IsAssignableFrom(extensionType, actualType)) { return(true); } // Check for a valid generic extension IMethod method = extension as IMethod; if (method == null || method.GenericInfo == null) { return(false); } System.Collections.Generic.List <IGenericParameter> genericParameters = new System.Collections.Generic.List <IGenericParameter>(GenericsServices.FindGenericParameters(extensionType)); if (genericParameters.Count == 0) { return(false); } TypeInferrer inferrer = new TypeInferrer(genericParameters); inferrer.Infer(extensionType, actualType); return(inferrer.FinalizeInference()); }
bool IsGenericityTheSame(TypeMember lhs, TypeMember rhs) { IGenericParameter[] lgp = GenericsServices.GetGenericParameters(lhs.Entity); IGenericParameter[] rgp = GenericsServices.GetGenericParameters(rhs.Entity); return(lgp == rgp || (null != lgp && null != rgp && lgp.Length == rgp.Length)); }