Как индексировать массив пользовательского типа?
Задание: написать operator для сложения множеств. Есть пользовательский класс целых чисел Znumbers. Нужно выполнить объединение множеств.
Выполняю в порядке:
- ввести с клавиатуры длину 2-х массивов
- заполнить массивы
- объединить массивы
Я не понимаю, как в операторе public static Znumbers operator +() индексировать Array1 и Array2, чтобы не вылетала ошибка
"CS021 Не удаётся применить индексирование через [] к выражению типа Znumbers"
public class Znumbers
{
public int[] Array;
public Znumbers(int[] array) // конструктор
{ Array = array; }
public int Length
{ get { return Array.Length; } }
int length;
// МЕТОД ДЛЯ ЗАПОЛНЕНИЯ МАССИВОВ И УКАЗАНИЯ КОЛ-ВА ЭЛ-ОВ
public void FillArray()
{
Console.WriteLine("Please enter the length of the array");
length = Convert.ToInt32(Console.ReadLine());
// ЗАПОЛНЯЕМ Array
for (int i = 0; i < length; i++)
{
Array[i] = int.Parse(Console.ReadLine());
}
}
// ВЫВОДИМ НА ЭКРАН МАССИВ
public void Print()
{
Console.WriteLine("Your array:");
for (int i = 0; i < length; i++)
{
Console.WriteLine(Array[i]);
}
}
// ОБЪЕДИНЕНИЕ МНОЖЕСТВ
public static Znumbers operator +(Znumbers Array1, Znumbers Array2)
{
//???
int[] Array3 = new int[Array1.Length + Array2.Length];
int j = 0;
for (int i = 0; i < Array1.Length; i++, j++)
Array3[j] = Convert.ToInt32(Array1[i]); //
for (int i = Array1.Length; i < Array2.Length; i++, j++)
Array3[j] = Convert.ToInt32(Array2[i]);
return new Znumbers(Array3);
}
}
Main:
{
static void Main(string[] args)
{
int[] a = new int[10];
int[] b = new int[10];
Znumbers massiv1 = new Znumbers(a);
Znumbers massiv2 = new Znumbers(b);
Znumbers massiv3;
massiv3 = massiv1 + massiv2; // объединение массивов
Console.WriteLine(massiv3);
Console.ReadLine();
}
}
Индексирование типа такого:
int [] array = { 1,2,3 }
public int this[int number]
{
get
{
for (int i = 0; i < array.Length; i++}
return j;
}
return -1
}
Не понимаю, как индексировать пользовательский тип данных (Znumbers) с заполнением массива с клавиатуры.
Направьте, пожалуйста, в какую сторону хотя бы смотреть.
Ответы (1 шт):
Это элементарно. Есть 2 варианта:
Первый: просто образатся по индексу к полю Array:
...Array1.Array[i]...
Второй: добавить возможность индексирования классу Znumbers:
public class Znumbers
{
...
public int this[int i]
{
get { return Array[i]; }
set { Array[i] = value; }
}
...
}