System.Xml.Schema.Compiler.IsFixedEqual C# (CSharp) Méthode

IsFixedEqual() private méthode

private IsFixedEqual ( SchemaDeclBase baseDecl, SchemaDeclBase derivedDecl ) : bool
baseDecl SchemaDeclBase
derivedDecl SchemaDeclBase
Résultat bool
         private bool IsFixedEqual(SchemaDeclBase baseDecl, SchemaDeclBase derivedDecl) {
            
            if (baseDecl.Presence == SchemaDeclBase.Use.Fixed || baseDecl.Presence == SchemaDeclBase.Use.RequiredFixed) {
                object baseFixedValue = baseDecl.DefaultValueTyped;
                object derivedFixedValue = derivedDecl.DefaultValueTyped;

                Debug.Assert(baseFixedValue != null);
                if (derivedDecl.Presence != SchemaDeclBase.Use.Fixed && derivedDecl.Presence != SchemaDeclBase.Use.RequiredFixed) {
                    return false;
                }
                Debug.Assert(derivedFixedValue != null);
                XmlSchemaDatatype baseDatatype = baseDecl.Datatype;
                XmlSchemaDatatype derivedDatatype = derivedDecl.Datatype;

                if (baseDatatype.Variety == XmlSchemaDatatypeVariety.Union) {
                    if (derivedDatatype.Variety == XmlSchemaDatatypeVariety.Union) {
                        if ( !derivedDatatype.IsEqual(baseFixedValue, derivedFixedValue) ) {
                            return false;
                        }
                    }
                    else { //Base is union and derived is member of union
                        XsdSimpleValue simpleFixedValue = baseDecl.DefaultValueTyped as XsdSimpleValue;
                        Debug.Assert(simpleFixedValue != null);
                        XmlSchemaDatatype memberType = simpleFixedValue.XmlType.Datatype;
                        if (!memberType.IsComparable(derivedDatatype) || !derivedDatatype.IsEqual(simpleFixedValue.TypedValue, derivedFixedValue)) { //base type {Union of long & string}, derived type {int}
                            return false;
                        }
                    }
                }
                else if (!derivedDatatype.IsEqual(baseFixedValue, derivedFixedValue)) {
                    return false;
                }
            }
            return true;
         }
    };
Compiler