public IMember Resolve(ITypeResolveContext context) { IType type = typeReference.Resolve(context); IEnumerable <IMember> members; if (symbolKind == SymbolKind.Accessor) { members = type.GetAccessors( m => m.Name == name && !m.IsExplicitInterfaceImplementation, GetMemberOptions.IgnoreInheritedMembers); } else if (symbolKind == SymbolKind.Method) { members = type.GetMethods( m => m.Name == name && m.SymbolKind == SymbolKind.Method && m.TypeParameters.Count == typeParameterCount && !m.IsExplicitInterfaceImplementation, GetMemberOptions.IgnoreInheritedMembers); } else { members = type.GetMembers( m => m.Name == name && m.SymbolKind == symbolKind && !m.IsExplicitInterfaceImplementation, GetMemberOptions.IgnoreInheritedMembers); } var resolvedParameterTypes = parameterTypes.Resolve(context); foreach (IMember member in members) { IParameterizedMember parameterizedMember = member as IParameterizedMember; if (parameterizedMember == null) { if (parameterTypes.Count == 0) { return(member); } } else if (parameterTypes.Count == parameterizedMember.Parameters.Count) { bool signatureMatches = true; for (int i = 0; i < parameterTypes.Count; i++) { IType type1 = DummyTypeParameter.NormalizeAllTypeParameters(resolvedParameterTypes[i]); IType type2 = DummyTypeParameter.NormalizeAllTypeParameters(parameterizedMember.Parameters[i].Type); if (!type1.Equals(type2)) { signatureMatches = false; break; } } if (signatureMatches) { return(member); } } } return(null); }