Ошибка в методе, который находит в тексте наименьшие и наибольшие слова

Программа исправно ищет наибольшее и наименьшее слово, но когда я решил добавить поиск всех больших слов (т.е. если слово = по длине наибольшему, то оно тоже выписывается), заметил, что программа делает больше циклов, чем вводится слов в массив. В чем моя ошибка? Я просто не понимаю, почему цикл работает больше раз, чем кол-во слов, которое я ввожу

static void Main(string[] args)
    {
        string minWord = "";
        string maxWord = "";
        int min = 999999;
        int max = 0;
        string text = Console.ReadLine();
        text = text.Trim();
        Console.WriteLine($"Min word: {GetWord(text).Item1}\nMax word: {GetWord(text).Item2}");
        Console.ReadKey();

        (string, string) GetWord(string word)
        {
            string[] Arr = word.Split(' ', ',', '.');
            for (int i = 0; i < Arr.Length; i++)
            {
                if (Arr[i].Length < min)
                {
                    min = Arr[i].Length;
                    minWord = Convert.ToString(Arr[i]);
                }
                else if (Arr[i].Length == max)
                {
                    maxWord = maxWord + " " + Arr[i];
                }
                else if (Arr[i].Length > max)
                {
                    max = Arr[i].Length;
                    maxWord = Convert.ToString(Arr[i]);
                }

            }
            return (minWord, maxWord);
        }

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

Автор решения: Volodymyr Osadchuk

Вы написали какой-то велосипед.
Советую использовать более легкий и, главное, понятный способ.
В коде ниже используеться LINQ метод Order By:

(string, string) GetWord(string word)
{
    var arr = word.Split(' ', ',', '.');
    var orderedArr = arr.OrderBy(w => w.Length).ToList();
    return (orderedArr.First(), orderedArr.Last());
}
→ Ссылка
Автор решения: Harry

Мне кажется, что за "лишние итерации" вы принимаете второй вызов GetText:

Console.WriteLine($"Min word: {GetWord(text).Item1}\nMax word: {GetWord(text).Item2}");

В результате для максимального слова вы получаете удвоенную строку - ведь строка maxWord находится за пределами функции GetText...

Перенесите переменные в GetText, и все получится:

(string, string) GetWord(string word)
{
    string minWord = "";
    string maxWord = "";
    int min = 999999;
    int max = 0;
    string[] Arr = word.Split(' ', ',', '.');
    for (int i = 0; i < Arr.Length; i++)
    ...

Пусть и неэффективно. Но лучше бы второго вызова GetText и вовсе избежать:

        var (m, M) = GetWord(text);
        Console.WriteLine($"Min word: {m}\nMax word: {M}");

Update

К комментарию об инициализации минимального/максимального значений — можно сделать так:

(string, string) GetWord(string word)
{
    string[] Arr = word.Split(' ', ',', '.');
    string minWord = Arr[0], maxWord = Arr[0];
    int min = Arr[0].Length;
    int max = Arr[0].Length;

    for (int i = 1; i < Arr.Length; i++)
    {
         ....
→ Ссылка