Сделать общие методы Min и Max в C#
В этом примере показано, как вы можете создать общие методы Min и Max, чтобы найти минимальное и максимальное значения в последовательности параметров.
Методы Math пространства имен Min и Max очень полезны, но у них есть два больших недостатка. Во-первых, они принимают только два параметра. Это означает, что если вы хотите найти самое большое и наименьшее из двух значений, вам нужно использовать их повторно. Второй недостаток заключается в том, что они работают только с двойными параметрами. Если вы передаете ints или плаваете в методах, значения повышаются до двойного типа данных, поэтому методы все еще работают, но их результаты удваиваются, поэтому вам нужно будет их преобразовать, если вы хотите, чтобы результаты имели исходные типы данных. р>
Следующий код определяет общий метод Max, который обрабатывает обе эти проблемы. Р>
1 2 3 4 5 6 7 8 |
// Возвращает наибольшее из значений. private T Max<T>(params T[] values) where T : IComparable<T> { T max = values[0]; for (int i = 1; i < values.Length; i++) if (values[i].CompareTo(max) > 0) max = values[i]; return max; } |
Метод имеет параметр типового типа T. Предложение where требует, чтобы T реализовал интерфейс IComparable. Это необходимо, чтобы позволить методу сравнивать значения, переданные в метод в качестве параметров.
Список параметров метода - это массив параметров, поэтому программа может передавать любое количество параметров.
Код метода устанавливает значение max, равное значению первого параметра. Затем он перебирает остальные значения, сравнивая max с другими значениями. Когда он находит значение больше max, метод обновляет max.
После проверки всех значений метод возвращает max.
Метод Min аналогичен.
Следующий код показывает, как основная программа проверяет методы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
private Random Rand = new Random(); private void goButton_Click(object sender, EventArgs e) { int A = Rand.Next(1, 100); int B = Rand.Next(1, 100); int C = Rand.Next(1, 100); int D = Rand.Next(1, 100); int E = Rand.Next(1, 100); txtValues.Text = A.ToString() + " " + B.ToString() + " " + C.ToString() + " " + D.ToString() + " " + E.ToString(); txtMinimum.Text = Min(A, B, C, D, E).ToString(); txtMaximum.Text = Max(A, B, C, D, E).ToString(); } |