System.Xml.Schema.XmlAtomicValue.ValueAs C# (CSharp) Méthode

ValueAs() public méthode

public ValueAs ( Type type, IXmlNamespaceResolver nsResolver ) : object
type Type
nsResolver IXmlNamespaceResolver
Résultat object
        public override object ValueAs(Type type, IXmlNamespaceResolver nsResolver) {
            XmlValueConverter valueConverter = this.xmlType.ValueConverter;

            if (type == typeof(XPathItem) || type == typeof(XmlAtomicValue))
                return this;

            if (this.objVal == null) {
                switch (this.clrType) {
                    case TypeCode.Boolean: return valueConverter.ChangeType(this.unionVal.boolVal, type);
                    case TypeCode.Int32: return valueConverter.ChangeType(this.unionVal.i32Val, type);
                    case TypeCode.Int64: return valueConverter.ChangeType(this.unionVal.i64Val, type);
                    case TypeCode.Double: return valueConverter.ChangeType(this.unionVal.dblVal, type);
                    case TypeCode.DateTime: return valueConverter.ChangeType(this.unionVal.dtVal, type);
                    default: Debug.Assert(false, "Should never get here"); break;
                }
            }

            return valueConverter.ChangeType(this.objVal, type, nsResolver);
        }

Usage Example

        //------------------------------------------------------------------------
        // External type to external type
        //------------------------------------------------------------------------

        internal static XmlAtomicValue ConvertToType(XmlAtomicValue value, XmlQueryType destinationType) {
            Debug.Assert(destinationType.IsStrict && destinationType.IsAtomicValue, "Can only convert to strict atomic type.");

            // This conversion matrix should match the one in XmlILVisitor.GetXsltConvertMethod
            switch (destinationType.TypeCode) {
                case XmlTypeCode.Boolean:
                    switch (value.XmlType.TypeCode) {
                        case XmlTypeCode.Boolean:
                        case XmlTypeCode.Double:
                        case XmlTypeCode.String:
                            return new XmlAtomicValue(destinationType.SchemaType, ToBoolean(value));
                    }
                    break;

                case XmlTypeCode.DateTime:
                    if (value.XmlType.TypeCode == XmlTypeCode.String)
                        return new XmlAtomicValue(destinationType.SchemaType, ToDateTime(value.Value));
                    break;

                case XmlTypeCode.Decimal:
                    if (value.XmlType.TypeCode == XmlTypeCode.Double)
                        return new XmlAtomicValue(destinationType.SchemaType, ToDecimal(value.ValueAsDouble));
                    break;

                case XmlTypeCode.Double:
                    switch (value.XmlType.TypeCode) {
                        case XmlTypeCode.Boolean:
                        case XmlTypeCode.Double:
                        case XmlTypeCode.String:
                            return new XmlAtomicValue(destinationType.SchemaType, ToDouble(value));

                        case XmlTypeCode.Decimal:
                            return new XmlAtomicValue(destinationType.SchemaType, ToDouble((decimal) value.ValueAs(DecimalType, null)));

                        case XmlTypeCode.Int:
                        case XmlTypeCode.Long:
                            return new XmlAtomicValue(destinationType.SchemaType, ToDouble(value.ValueAsLong));
                    }
                    break;

                case XmlTypeCode.Int:
                case XmlTypeCode.Long:
                    if (value.XmlType.TypeCode == XmlTypeCode.Double)
                        return new XmlAtomicValue(destinationType.SchemaType, ToLong(value.ValueAsDouble));
                    break;

                case XmlTypeCode.String:
                    switch (value.XmlType.TypeCode) {
                        case XmlTypeCode.Boolean:
                        case XmlTypeCode.Double:
                        case XmlTypeCode.String:
                            return new XmlAtomicValue(destinationType.SchemaType, ToString(value));

                        case XmlTypeCode.DateTime:
                            return new XmlAtomicValue(destinationType.SchemaType, ToString(value.ValueAsDateTime));
                    }
                    break;
            }

            Debug.Fail("Conversion from " + value.XmlType.QualifiedName.Name + " to " + destinationType + " is not supported.");
            return value;
        }
All Usage Examples Of System.Xml.Schema.XmlAtomicValue::ValueAs