Как заполнить матрицу универсального типа при заполнении рандомом

Я пытаюсь написать заполнение матрицы универсального типа для конкретного типа int. Но мне пишет что Random не может работать с универсальным типом. Кто-нибудь сталкивался с такой проблемой, и если да то как решили? В данном коде я хочу обработать заполнение для матрицы типа int В коде это функция public void fillMatrixByRandom(int max_value)

    class Matrix<T> where T : struct
    {
        T[,] matrix_first;
        T[,] matrix_second;

        public Matrix(int strings_matrix_first, int columns_matrix_first, int strings_matrix_second, int columns_matrix_second)
        {
            matrix_first = new T[columns_matrix_first, strings_matrix_first];
            matrix_second = new T[columns_matrix_second, strings_matrix_second];
        }

        public void fillMatrixByRandom(int max_value)
        {
            Random rand = new Random();
            if(matrix_first is int)
            {
                for (int i = 0; i < matrix_first.GetLength(0); i++)
                {
                    for (int j = 0; j < matrix_first.GetLength(1); j++)
                    {
                        matrix_first[i, j] = rand.Next(max_value);
                    }
                }
            }
        
       
        }
        public void showMatrix()
        {
            for (int i = 0; i < matrix_first.GetLength(0); i++)
            {
                for (int j = 0; j < matrix_first.GetLength(1); j++)
                {
                    Console.Write(matrix_first[i, j] + " ");
                }
                Console.WriteLine();
            }
            for (int i = 0; i < matrix_second.GetLength(0); i++)
            {
                for (int j = 0; j < matrix_second.GetLength(1); j++)
                {
                    Console.Write(matrix_second[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
        ~Matrix()
        {
            matrix_first = null;
            matrix_second = null;
            GC.Collect();
        }
    }

Ответы (1 шт):

Автор решения: SoftwareInYourMind

class Matrix - темплейт/generic. насколько я помню, чтобы темплейты заработали, надо:

  1. объявить темплейт. это сделано, но функция fillMatrixByRandom не должна быть определена в нём. класса на данный момент ещё нет, а функция пытается записать туда инты.
  2. обявить объект этого типа, специфицировав T, например Matrix<int>. компиль поймёт это и сделает сделает реальный класс с интами. см msdn
  3. передать объект класса в функцию или расширение fillMatrixByRandom, которая принимает в себя Matrix и заполняет его интами.

GC.Collect(); на мой взгляд излишен. т.к. GC выполняется сам и дёргать его без особой надобности не надо. при частом вызове GC можно получить негативный эффект в плане производительности.

→ Ссылка