Beispiel #1
0
        public IEnumerable <IProperty> GetProperties(ITypeResolveContext context, Predicate <IProperty> filter = null)
        {
            Substitution     substitution = new Substitution(typeArguments);
            List <IProperty> properties   = genericType.GetProperties(context, filter).ToList();

            for (int i = 0; i < properties.Count; i++)
            {
                SpecializedProperty p = new SpecializedProperty(properties[i]);
                p.SetDeclaringType(this);
                p.SubstituteTypes(context, substitution);
                properties[i] = p;
            }
            return(properties);
        }
        IMember Specialize(IMember member, Func <ITypeReference, ITypeReference> substitution)
        {
            IMethod method = member as IMethod;

            if (method != null)
            {
                SpecializedMethod m = new SpecializedMethod(method);
                m.SetDeclaringType(this);
                m.SubstituteTypes(substitution);
                return(m);
            }
            IProperty property = member as IProperty;

            if (property != null)
            {
                SpecializedProperty p = new SpecializedProperty(property);
                p.SetDeclaringType(this);
                p.SubstituteTypes(substitution);
                return(p);
            }
            IField field = member as IField;

            if (field != null)
            {
                SpecializedField f = new SpecializedField(field);
                f.SetDeclaringType(this);
                f.ReturnType = substitution(f.ReturnType);
                return(f);
            }
            IEvent ev = member as IEvent;

            if (ev != null)
            {
                SpecializedEvent e = new SpecializedEvent(ev);
                e.SetDeclaringType(this);
                e.ReturnType = substitution(e.ReturnType);
                return(e);
            }
            throw new ArgumentException("Unknown member");
        }
Beispiel #3
0
 public IMember Specialize(TypeParameterSubstitution substitution) => SpecializedProperty.Create(this, substitution);