private void AddRule(ConversionRule ruleAdd) {
            for (int i = 0; i < this.rules.Count; i++) {
                ConversionRule rule = this.rules[i];

                if (rule.XmlType == ruleAdd.XmlType) {
                    if (rule.SourceType == ruleAdd.SourceType) {
                        if (rule.DestinationType == ruleAdd.DestinationType) {
                            // Override previous rule with new rule
                            this.rules[i] = ruleAdd;
                            return;
                        }
                    }
                }
            }

            this.rules.Add(ruleAdd);
        }
        private void GenerateConversions(ConversionRule defaultRule, IList<ConversionRule> rulesSwitch) {
            int cnt = rulesSwitch.Count;

            // Don't need to test TypeCode for default rule
            if (defaultRule != null)
                cnt--;

            if (cnt > 0) {
                if (cnt > 1) {
                    this.w.WriteLine("switch (TypeCode) {");
                }

                foreach (ConversionRule ruleSwitch in rulesSwitch) {
                    if (ruleSwitch != defaultRule) {
                        if (cnt > 1) {
                            this.w.Indent++;
                            this.w.WriteLine("case XmlTypeCode." + ruleSwitch.XmlType + ": return " + ruleSwitch.ConversionExpression + ";");
                            this.w.Indent--;
                        }
                        else {
                            this.w.WriteLine("if (TypeCode == XmlTypeCode." + ruleSwitch.XmlType + ") return " + ruleSwitch.ConversionExpression + ";");
                        }
                    }
                }

                if (cnt > 1) {
                    this.w.WriteLine("}");
                }
            }

            if (defaultRule != null)
                this.w.WriteLine("return " + defaultRule.ConversionExpression + ";");
        }