System.Xml.Schema.SchemaCollectionCompiler.CalculateEffectiveTotalRange C# (CSharp) Méthode

CalculateEffectiveTotalRange() private méthode

private CalculateEffectiveTotalRange ( XmlSchemaParticle particle, decimal &minOccurs, decimal &maxOccurs ) : void
particle XmlSchemaParticle
minOccurs decimal
maxOccurs decimal
Résultat void
        private void CalculateEffectiveTotalRange(XmlSchemaParticle particle, out decimal minOccurs, out decimal maxOccurs) {
            if (particle is XmlSchemaElement || particle is XmlSchemaAny) {
                minOccurs = particle.MinOccurs;
                maxOccurs = particle.MaxOccurs;
            }
            else if (particle is XmlSchemaChoice) {
                if (((XmlSchemaChoice)particle).Items.Count == 0) {
                    minOccurs = maxOccurs = decimal.Zero;
                }
                else {
                    minOccurs = decimal.MaxValue;
                    maxOccurs = decimal.Zero;
                    foreach (XmlSchemaParticle p in ((XmlSchemaChoice)particle).Items) {
                        decimal min, max;
                        CalculateEffectiveTotalRange(p, out min, out max);
                        if (min < minOccurs) {
                            minOccurs = min;
                        }
                        if (max > maxOccurs) {
                            maxOccurs = max;
                        }
                    }
                    minOccurs *= particle.MinOccurs;
                    if (maxOccurs != decimal.MaxValue) {
                        if (particle.MaxOccurs == decimal.MaxValue)
                            maxOccurs = decimal.MaxValue;
                        else 
                            maxOccurs *= particle.MaxOccurs;
                    }
                }
            }
            else {
                XmlSchemaObjectCollection collection = ((XmlSchemaGroupBase)particle).Items;
                if (collection.Count == 0) {
                    minOccurs = maxOccurs = decimal.Zero;
                }
                else {
                    minOccurs = 0;
                    maxOccurs = 0;
                    foreach (XmlSchemaParticle p in collection) {
                        decimal min, max;
                        CalculateEffectiveTotalRange(p, out min, out max);
                        minOccurs += min;
                        if (maxOccurs != decimal.MaxValue) {
                            if (max == decimal.MaxValue)
                                maxOccurs = decimal.MaxValue;
                            else 
                                maxOccurs += max;
                        }
                    }
                    minOccurs *= particle.MinOccurs;
                    if (maxOccurs != decimal.MaxValue) {
                        if (particle.MaxOccurs == decimal.MaxValue)
                            maxOccurs = decimal.MaxValue;
                        else 
                            maxOccurs *= particle.MaxOccurs;
                    }
                }
            }
        }