Сделать общие методы Min и Max в C#

В этом примере показано, как вы можете создать общие методы Min и Max, чтобы найти минимальное и максимальное значения в последовательности параметров.

Методы Math пространства имен Min и Max очень полезны, но у них есть два больших недостатка. Во-первых, они принимают только два параметра. Это означает, что если вы хотите найти самое большое и наименьшее из двух значений, вам нужно использовать их повторно. Второй недостаток заключается в том, что они работают только с двойными параметрами. Если вы передаете ints или плаваете в методах, значения повышаются до двойного типа данных, поэтому методы все еще работают, но их результаты удваиваются, поэтому вам нужно будет их преобразовать, если вы хотите, чтобы результаты имели исходные типы данных.

Следующий код определяет общий метод Max, который обрабатывает обе эти проблемы.

// Возвращает наибольшее из значений.
private T Max(params T[] values) where T : IComparable
{
    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 аналогичен.

Следующий код показывает, как основная программа проверяет методы.

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();
}

Источник: http://csharphelper.com/blog/2015/05/make-generic-min-and-max-methods-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector