Максимальный элемент в списке, C#

Вот мой код:

sing System;

namespace LB1
{
    class Elem
    {
        public string Value;
        public Elem Next;

        //Конструктор
        public Elem(string value)
        {
            Value = value;
        }
    }

    class Program
    {
        static Elem _head;
        static Elem _current;

        static void Main()
        {
            string value = "";

            while (true)
            {
                Console.WriteLine("" +
                    "0-Просмотр всего списка\n" +
                    "1-Вставка элемента справа относительно текущего\n" +
                    "2-Поиск элемента\n" +
                    "3-Удаление элемента\n" +
                    "4-Очистка списка\n" +
                    "5-По варианту: поиск максимального элемента\n" +
                    "6-Выйти из приложения");
                int choice = int.Parse(Console.ReadLine());
                switch (choice)
                {
                    case 0:
                        PrintList();
                        break;
                    case 1:
                        InputElem();
                        break;
                    case 2:
                        Console.Write("Введите значение, которое хотите найти: ");
                        value = Console.ReadLine();
                        FindElem(value);
                        break;
                    case 3:
                        Console.Write("Введите значение, которое хотите удалить: ");
                        value = Console.ReadLine();
                        DeleteElem(value);
                        break;
                    case 4:
                        ListClear();
                        break;
                    case 5:
                        PrintMaxElem();
                        break;
                    case 6:
                        break;
                    default:
                        Console.WriteLine("Такой команды нет");
                        break;
                }
                if (choice == 6) break;
            }
        }

        /// <summary>
        /// Просмотр всего списка
        /// </summary>
        static void PrintList()
        {
            if (_head == null)
            {
                Console.WriteLine("Список пуст");
                return;
            }
            else
            {
                _current = _head;
                int count = 1;
                while (_current != null)
                {
                    Console.WriteLine($"{count}){_current.Value}");

                    _current = _current.Next;
                    count++;
                }

            }
        }

        static void InputElem()
        {
            Console.Write("Введите значение нового элемента: ");
            string value = Console.ReadLine();

            Add(new Elem(value));
        }

        /// <summary>
        /// Вставка элемента справа относительно текущего
        /// </summary>
        /// <param name="elem">Элемент</param>
        static void Add(Elem elem)
        {
            if (_head == null)
            {
                _head = elem;
            }
            else
            {
                _current = _head;
                while (_current.Next != null)
                {
                    _current = _current.Next;
                }

                _current.Next = elem;
            }
        }

        /// <summary>
        /// Поиска элемента в списке
        /// </summary>
        /// <param name="value">значение</param>
        static void FindElem(string value)
        {
            if (_head == null)
            {
                Console.WriteLine("Список пуст");
                return;
            }

            bool isFound = false;

            _current = _head;
            while (_current.Next != null)
            {
                if (_current.Value == value)
                {
                    isFound = true;
                    break;
                }
                _current = _current.Next;
            }

            if (isFound) Console.WriteLine($"Элемент со значением \"{value}\" был найден!");
            else Console.WriteLine($"Элемент со значением \"{value}\" не найден! ");
        }

        /// <summary>
        /// Удаления элемента из списка
        /// </summary>
        /// <param name="value">Значение элемента</param>
        static void DeleteElem(string value)
        {
            if (_head == null)
            {
                Console.WriteLine("Список пуст");
                return;
            }

            _current = _head;
            while (_current.Next.Value != value)
            {

                _current = _current.Next;

                if (_current.Next == null) break;
            }

            if (_current.Next.Next != null)
                _current.Next = _current.Next.Next;
            else
                _current.Next = null;
        }
        /// <summary>
        /// очистки списка
        /// </summary>
        static void ListClear()
        {
            _head = null;
            _current = null;
        }

        /*  Метод по заданию: 
            Поиск максимального элемента списка.*/

        /// <summary>
        /// Поиск максимального элемента
        /// </summary>
        static void PrintMaxElem()
        {
            Elem max = _head;
            if (_head == null)
            {
                Console.WriteLine("Список пуст");
                return;
            }
                _current = _head;

                while (_current.Next != null)
                {
                    if(_current.Value >= max)
                       {
                           max = _current.Value;
                       }
                    _current = _current.Next;
                }
            Console.WriteLine($"Максимальный элемент={value}");
            }
        }
    }
}

Постоянно выдаёт ошибки в конце. Не могу никак сообразить насчёт максимального элемента в списке.Не подскажите?

какие?

if(_current.Value >= max)
{
max = _current.Value;
}
_current = _current.Next;
}
Console.WriteLine($“Максимальный элемент={value}”);
}
Где-то здесь что–то не так. VS подчёркивает красным

Так а в ошибке-то что написано?
Их же надо читать и пытаться понять что они значат, а не в ужасе убегать увидев красное )

Вот, я думаю здесь основная ошибка:
оператор">" невозможно применить к операнду типа “string” и “Elem”

Ну так вот в ней и написано что не так. Невозможно сравнить строку и объект класса Elem.

Видимо я не правильно понимаю, где строка, а где элемент

строка:

не строка:

Я в классе Elem записал переменную max. _current, по сути, кажется), переменная, куда записываются текущие значения. Даже если я пишу просто _current >= max, мне пишут, что нельзя сравнивать Elem и Elem!

Ну дык сравнивайте например строку и строку )

Так я ищу максимальный элемент!)

Ну так если у класса не определены операции сравнения, то сравнивать можно только его свойства самому.

Почему тут

есть .Value, а справа нет?

))Не знаю. Я вообще не понимаю что сравнивать и с чем. Если бы был изначально задан массив, было бы проще. Но тут строки, классы, значения непонятно куда записываются! Я в C# пока нуб)

А как вы живете с таким навыком?? Точнее с его отсутствием??Если у вас в магазине будут лежать товары с разным весом вы тоже будете неспособны выбрать самый тяжелый товар??

Основной алгоритм нахождения такой:

  1. Создаем переменную “а” и устанавливаем ее в минимально возможное значение.
  2. берем объект.
  3. смотрим нужное значение и если оно больше чем в “а” то сохраняем его в “а”.
  4. Если в списке есть еще объекты то переходим на шаг 1.