ArrayConverter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / ComponentModel / ArrayConverter.cs / 1305376 / ArrayConverter.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 */ 
namespace System.ComponentModel {
    using Microsoft.Win32; 
    using System.Collections;
    using System.Diagnostics;
    using System.Globalization;
    using System.Runtime.InteropServices; 
    using System.Runtime.Remoting;
    using System.Runtime.Serialization.Formatters; 
    using System.Security.Permissions; 

    ///  
    /// Provides a type converter to convert 
    /// objects to and from various other representations.
    /// 
    [HostProtection(SharedState = true)] 
    public class ArrayConverter : CollectionConverter
    { 
 
        /// 
        ///    Converts the given value object to the specified destination type. 
        /// 
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
            if (destinationType == null) {
                throw new ArgumentNullException("destinationType"); 
            }
 
            if (destinationType == typeof(string)) { 
                if (value is Array) {
                    return SR.GetString(SR.ArrayConverterText, value.GetType().Name); 
                }
            }

            return base.ConvertTo(context, culture, value, destinationType); 
        }
 
        ///  
        ///    Gets a collection of properties for the type of array
        ///       specified by the value 
        ///       parameter.
        /// 
        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) {
 
            PropertyDescriptor[] props = null;
 
            if (value.GetType().IsArray) { 
                Array valueArray = (Array)value;
                int length = valueArray.GetLength(0); 
                props = new PropertyDescriptor[length];

                Type arrayType = value.GetType();
                Type elementType = arrayType.GetElementType(); 

                for (int i = 0; i < length; i++) { 
                    props[i] = new ArrayPropertyDescriptor(arrayType, elementType, i); 
                }
            } 

            return new PropertyDescriptorCollection(props);
        }
 
        /// 
        ///    Gets a value indicating whether this object 
        ///       supports properties. 
        /// 
        public override bool GetPropertiesSupported(ITypeDescriptorContext context) { 
            return true;
        }

        private class ArrayPropertyDescriptor : SimplePropertyDescriptor { 
            private int index;
 
            public ArrayPropertyDescriptor(Type arrayType, Type elementType, int index) : base(arrayType, "[" + index + "]", elementType, null) { 
                this.index = index;
            } 

            public override object GetValue(object instance) {
                if (instance is Array) {
                    Array array = (Array)instance; 
                    if (array.GetLength(0) > index) {
                        return array.GetValue(index); 
                    } 
                }
 
                return null;
            }

            public override void SetValue(object instance, object value) { 
                if (instance is Array) {
                    Array array = (Array)instance; 
                    if (array.GetLength(0) > index) { 
                        array.SetValue(value, index);
                    } 

                    OnValueChanged(instance, EventArgs.Empty);
                }
            } 
        }
    } 
} 

 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

/* 
 */ 
namespace System.ComponentModel {
    using Microsoft.Win32; 
    using System.Collections;
    using System.Diagnostics;
    using System.Globalization;
    using System.Runtime.InteropServices; 
    using System.Runtime.Remoting;
    using System.Runtime.Serialization.Formatters; 
    using System.Security.Permissions; 

    ///  
    /// Provides a type converter to convert 
    /// objects to and from various other representations.
    /// 
    [HostProtection(SharedState = true)] 
    public class ArrayConverter : CollectionConverter
    { 
 
        /// 
        ///    Converts the given value object to the specified destination type. 
        /// 
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
            if (destinationType == null) {
                throw new ArgumentNullException("destinationType"); 
            }
 
            if (destinationType == typeof(string)) { 
                if (value is Array) {
                    return SR.GetString(SR.ArrayConverterText, value.GetType().Name); 
                }
            }

            return base.ConvertTo(context, culture, value, destinationType); 
        }
 
        ///  
        ///    Gets a collection of properties for the type of array
        ///       specified by the value 
        ///       parameter.
        /// 
        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) {
 
            PropertyDescriptor[] props = null;
 
            if (value.GetType().IsArray) { 
                Array valueArray = (Array)value;
                int length = valueArray.GetLength(0); 
                props = new PropertyDescriptor[length];

                Type arrayType = value.GetType();
                Type elementType = arrayType.GetElementType(); 

                for (int i = 0; i < length; i++) { 
                    props[i] = new ArrayPropertyDescriptor(arrayType, elementType, i); 
                }
            } 

            return new PropertyDescriptorCollection(props);
        }
 
        /// 
        ///    Gets a value indicating whether this object 
        ///       supports properties. 
        /// 
        public override bool GetPropertiesSupported(ITypeDescriptorContext context) { 
            return true;
        }

        private class ArrayPropertyDescriptor : SimplePropertyDescriptor { 
            private int index;
 
            public ArrayPropertyDescriptor(Type arrayType, Type elementType, int index) : base(arrayType, "[" + index + "]", elementType, null) { 
                this.index = index;
            } 

            public override object GetValue(object instance) {
                if (instance is Array) {
                    Array array = (Array)instance; 
                    if (array.GetLength(0) > index) {
                        return array.GetValue(index); 
                    } 
                }
 
                return null;
            }

            public override void SetValue(object instance, object value) { 
                if (instance is Array) {
                    Array array = (Array)instance; 
                    if (array.GetLength(0) > index) { 
                        array.SetValue(value, index);
                    } 

                    OnValueChanged(instance, EventArgs.Empty);
                }
            } 
        }
    } 
} 

 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK