Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу - C#
Формулировка задачи:
Подскажите как выполнить такую задачу? "Создать обобщенный класс для представления одномерного массива, который автоматически расширяется, когда пользователь обращается к несуществующему элементу. Например, если создан пустой массив a, первое обращение (для чтения или записи) к элементу a [n] обеспечит расширение массива так, чтобы он содержал n + 1 элемент с индексами от 0 до n-го включительно. Если определенные элементы уже существовали, они сохраняются и массив дополняется новыми элементами. Если элемент с индексом уже существует, осуществляется обычное обращение."
Или хотя бы подскажите можно ли как-то получить значение [index], чтобы использовать его в другом методе
......
......
public class ArrayContainer<T>
{
private T[] arr;//закрите поле - "звичайний" масив (список);
public ArrayContainer(params T[] arr)//властивості (для читання)
{
this.arr = new T[arr.Length];
Array.Copy(arr, this.arr, arr.Length);
}
public ArrayContainer()
{
this.arr = new T[arr.Length];
}
public T this[int index]//індексатор;
{
set { arr[index] = value; } //как получить значение этого index, чтобы воспользоваться им в методе public ArrayContainer(params T[] arr) ?
get { return arr[index]; }
}Решение задачи: «Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу»
textual
Листинг программы
using System;
using System.Linq;
namespace ConsoleApplication196
{
internal class Program
{
private static void Main(string[] args)
{
var arr = new ExpandingArray<string>();
arr[1] = "bloom";
arr[3] = "flame";
//
for (int i = 0; i < arr.Length; i++)
Console.WriteLine("{0}: {1}", i, arr[i]);
Console.ReadLine();
}
}
public class ExpandingArray<T>
{
private T[] items = new T[0];
public int Length { get { return items.Length; } }
public T this[int index]
{
get
{
if (index >= items.Length)
Expand(index + 1);
return items[index];
}
set
{
if (index >= items.Length)
Expand(index + 1);
items[index] = value;
}
}
void Expand(int newLength)
{
Array.Resize(ref items, newLength);
}
}
}