Как заполнить матрицу универсального типа при заполнении рандомом
Я пытаюсь написать заполнение матрицы универсального типа для конкретного типа 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. насколько я помню, чтобы темплейты заработали, надо:
- объявить темплейт. это сделано, но функция fillMatrixByRandom не должна быть определена в нём. класса на данный момент ещё нет, а функция пытается записать туда инты.
- обявить объект этого типа, специфицировав T, например
Matrix<int>. компиль поймёт это и сделает сделает реальный класс с интами. см msdn - передать объект класса в функцию или расширение fillMatrixByRandom, которая принимает в себя Matrix и заполняет его интами.
GC.Collect(); на мой взгляд излишен. т.к. GC выполняется сам и дёргать его без особой надобности не надо. при частом вызове GC можно получить негативный эффект в плане производительности.