File: System\ComponentModel\Design\ArrayEditor.cs
Web Access
Project: src\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
namespace System.ComponentModel.Design;
 
/// <summary>
///  Edits an array of values.
/// </summary>
public class ArrayEditor : CollectionEditor
{
    /// <summary>
    ///  Initializes a new instance of <see cref="ArrayEditor"/>
    ///  using the specified type for the array.
    /// </summary>
    public ArrayEditor(Type type) : base(type)
    {
    }
 
    /// <summary>
    ///  Gets or sets the data type this collection contains.
    /// </summary>
    protected override Type CreateCollectionItemType()
        => CollectionType?.GetElementType();
 
    /// <summary>
    ///  Gets the items in the array.
    /// </summary>
    protected override object[] GetItems(object editValue)
    {
        if (editValue is Array valueArray)
        {
            object[] items = new object[valueArray.GetLength(0)];
            Array.Copy(valueArray, items, items.Length);
            return items;
        }
 
        return [];
    }
 
    /// <summary>
    ///  Sets the items in the array.
    /// </summary>
    protected override object SetItems(object editValue, object[] value)
    {
        if (editValue is not null and not Array)
        {
            return editValue;
        }
 
        if (value is null)
        {
            return null;
        }
 
        Array newArray = Array.CreateInstance(CollectionItemType, value.Length);
        Array.Copy(value, newArray, value.Length);
        return newArray;
    }
}