ArrayExtension.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Markup / ArrayExtension.cs / 1 / ArrayExtension.cs

                            /****************************************************************************\ 
*
* File: ArrayExtension.cs
*
*  Class for Xaml markup extension for Arrays 
*
* Copyright (C) 2004 by Microsoft Corporation.  All rights reserved. 
* 
\***************************************************************************/
 
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel; 

namespace System.Windows.Markup 
{ 
    /// 
    ///  Class for Xaml markup extension for Arrays. 
    /// 
    [ContentProperty("Items")]
    [MarkupExtensionReturnType(typeof(Array))]
    public class ArrayExtension : MarkupExtension, IAddChild 
    {
        ///  
        ///  Constructor that takes no parameters.  This creates an empty array. 
        /// 
        public ArrayExtension() 
        {
        }

        ///  
        ///  Constructor that takes one parameter.  This initializes the type of the array.
        ///  
        public ArrayExtension( 
            Type arrayType)
        { 
            if (arrayType == null)
            {
                throw new ArgumentNullException("arrayType");
            } 
            _arrayType = arrayType;
        } 
 
        /// 
        /// Constructor for writing 
        /// 
        /// The array to write
        public ArrayExtension(Array elements)
        { 
            _arrayList.AddRange(elements);
            _arrayType = elements.GetType().GetElementType(); 
        } 

        /// 
        /// Called to Add an object as a new array item.  This will append the object to the end
        /// of the array.
        ///
        /// 
        /// Object to add to the end of the array.
        /// 
        public void AddChild(Object value) 
        {
            _arrayList.Add(value); 
        }

        ///
        /// Called to Add a text as a new array item.  This will append the object to the end 
        /// of the array.
        /// 
        /// 
        /// Text to Add to the end of the array
        /// 
        public void AddText(string text)
        {
            AddChild(text);
        } 

        /// 
        /// Get and set the type of array to be created when calling ProvideValue 
        ///
        [ConstructorArgument("type")] 
        public Type Type
        {
            get { return _arrayType; }
            set { _arrayType = value; } 
        }
 
        ///  
        /// An IList accessor to the contents of the array
        ///  
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public IList Items
        {
            get { return _arrayList; } 
        }
 
        ///  
        ///  Return an array that is sized to the number of objects added to the ArrayExtension.
        ///  
        /// Object that can provide services for the markup extension.
        /// 
        ///  The Array containing all the objects added to this extension.
        ///  
        public override object ProvideValue(IServiceProvider serviceProvider)
        { 
            if (_arrayType == null) 
            {
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayType)); 
            }

            object retArray = null;
 
            try
            { 
                retArray = _arrayList.ToArray(_arrayType); 
            }
            catch (System.InvalidCastException) 
            {
                // If an element was added to the ArrayExtension that does not agree with the
                // ArrayType, then an InvalidCastException will occur.  Generate a more
                // meaningful error for this case. 
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayBadType, _arrayType.Name));
            } 
 
            return retArray;
        } 

        private ArrayList _arrayList = new ArrayList();
        private Type      _arrayType;
 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/****************************************************************************\ 
*
* File: ArrayExtension.cs
*
*  Class for Xaml markup extension for Arrays 
*
* Copyright (C) 2004 by Microsoft Corporation.  All rights reserved. 
* 
\***************************************************************************/
 
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel; 

namespace System.Windows.Markup 
{ 
    /// 
    ///  Class for Xaml markup extension for Arrays. 
    /// 
    [ContentProperty("Items")]
    [MarkupExtensionReturnType(typeof(Array))]
    public class ArrayExtension : MarkupExtension, IAddChild 
    {
        ///  
        ///  Constructor that takes no parameters.  This creates an empty array. 
        /// 
        public ArrayExtension() 
        {
        }

        ///  
        ///  Constructor that takes one parameter.  This initializes the type of the array.
        ///  
        public ArrayExtension( 
            Type arrayType)
        { 
            if (arrayType == null)
            {
                throw new ArgumentNullException("arrayType");
            } 
            _arrayType = arrayType;
        } 
 
        /// 
        /// Constructor for writing 
        /// 
        /// The array to write
        public ArrayExtension(Array elements)
        { 
            _arrayList.AddRange(elements);
            _arrayType = elements.GetType().GetElementType(); 
        } 

        /// 
        /// Called to Add an object as a new array item.  This will append the object to the end
        /// of the array.
        ///
        /// 
        /// Object to add to the end of the array.
        /// 
        public void AddChild(Object value) 
        {
            _arrayList.Add(value); 
        }

        ///
        /// Called to Add a text as a new array item.  This will append the object to the end 
        /// of the array.
        /// 
        /// 
        /// Text to Add to the end of the array
        /// 
        public void AddText(string text)
        {
            AddChild(text);
        } 

        /// 
        /// Get and set the type of array to be created when calling ProvideValue 
        ///
        [ConstructorArgument("type")] 
        public Type Type
        {
            get { return _arrayType; }
            set { _arrayType = value; } 
        }
 
        ///  
        /// An IList accessor to the contents of the array
        ///  
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public IList Items
        {
            get { return _arrayList; } 
        }
 
        ///  
        ///  Return an array that is sized to the number of objects added to the ArrayExtension.
        ///  
        /// Object that can provide services for the markup extension.
        /// 
        ///  The Array containing all the objects added to this extension.
        ///  
        public override object ProvideValue(IServiceProvider serviceProvider)
        { 
            if (_arrayType == null) 
            {
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayType)); 
            }

            object retArray = null;
 
            try
            { 
                retArray = _arrayList.ToArray(_arrayType); 
            }
            catch (System.InvalidCastException) 
            {
                // If an element was added to the ArrayExtension that does not agree with the
                // ArrayType, then an InvalidCastException will occur.  Generate a more
                // meaningful error for this case. 
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionArrayBadType, _arrayType.Name));
            } 
 
            return retArray;
        } 

        private ArrayList _arrayList = new ArrayList();
        private Type      _arrayType;
 
    }
} 

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

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