System.Xml.Xsl.XmlQueryTypeFactory.AddChildParticle C# (CSharp) Method

AddChildParticle() private method

Descend though the content model
private AddChildParticle ( List list, XmlSchemaParticle particle, XmlQueryType filter ) : XmlQueryCardinality
list List
particle System.Xml.Schema.XmlSchemaParticle
filter XmlQueryType
return XmlQueryCardinality
        private XmlQueryCardinality AddChildParticle(List<XmlQueryType> list, XmlSchemaParticle particle, XmlQueryType filter) {
            XmlQueryCardinality card = XmlQueryCardinality.None;
            XmlSchemaElement element = particle as XmlSchemaElement;
            if (element != null) {
                // Single element
                card = AddFilteredPrime(list, CreateElementType(element), filter);
            }
            else {
                // XmlSchemaAny matches more then one element
                XmlSchemaAny any = particle as XmlSchemaAny;
                if (any != null) {
                    XmlSchemaType elementSchemaType = any.ProcessContentsCorrect == XmlSchemaContentProcessing.Skip ? XmlSchemaComplexType.UntypedAnyType : XmlSchemaComplexType.AnyType;
                    switch (any.NamespaceList.Type) {
                    case NamespaceList.ListType.Set:
                        // Add a separate type for each namespace in the list
                        foreach (string ns in any.NamespaceList.Enumerate) {
                            card |= AddFilteredPrime(list, CreateElementType(ns, false, elementSchemaType), filter);
                        }
                        break;
                    case NamespaceList.ListType.Other:
                        // Add ##other
                        card = AddFilteredPrime(list, CreateElementType(any.NamespaceList.Excluded, true, elementSchemaType), filter);
                        break;
                    case NamespaceList.ListType.Any:
                    default:
                        // Add ##any
                        card = AddFilteredPrime(list, any.ProcessContentsCorrect == XmlSchemaContentProcessing.Skip ? UntypedElement : Element, filter);
                        break;
                    }
                }
                else {
                    //  recurse into particle group
                    XmlSchemaGroupBase group = particle as XmlSchemaGroupBase;
                    if (group.Items.Count != 0) {
                        if (particle is XmlSchemaChoice) {
                            foreach (XmlSchemaParticle p in group.Items) {
                                card |= AddChildParticle(list, p, filter);
                            }
                        }
                        else { // Sequence and  All
                            foreach (XmlSchemaParticle p in group.Items) {
                                card += AddChildParticle(list, p, filter);
                            }
                        }
                    }
                }
            }
            return card * CardinalityOfParticle(particle);
        }