Ошибка Аргумент 1: не преобразовать в int (не могу удалить ячейку в List )

Не могу удалить ячейку. Не судите строго я и так скинул минимальное количество кода, так чтобы было только то что нужно. Коментарии записаны не для стак овер флоу, просто решил оставить.

    public delegate string Message();

    public class Item    //класс предметов
    {
        public string name; //имя
        public string type; //тип предмета
        public int damage;  //урон у оружия -, у эелексира +
        public int numbers = 1; //колличество предметов в инвентаре

        public Message mes; //экземляр делегата для того чтобы проверить мою догадку о использовании предмета (и это зависит от его типа)

        public void ItemType()  //исползовать после добавлении нового предмета в AllItems.at
        {
            if (type == "Оружие")   //тип предмета оружие
            {
                mes = WeaponUse;    //присваиваем экземпляру делегата, то как мы будем использовать предмет
            }
            else if (type == "Элексир")
            {
                mes = ElexirUse;
            }
            else    //если предмет не имеет своего типа или просто хлам, вроде камня
            {
                mes = OtherUse;
            }
        }

        public string useItem() //через этот метод мы используем предмет
        {
            return mes();   // возвращаем строку (еще пока нет взаимодействия предета и игрока с игроком, вроде удара или выпитого элексира)
        }

        public string WeaponUse()   //использование оружия
        {
            return "Ударил и нанес " + damage + " урона!!!";
        }
        public string ElexirUse()   //использование элексира
        {
            return "Выпил элексил и востановил " + damage + " здоровья!!!";
        }
        public string OtherUse()    //осмотр хлама
        {
            return "Название предмета: " + name + "\n" + "Тип предмета: " + type;
        }
    }

    public class AllItems   //тут есть односвязный список со всеми предметами которые можно дать игроку
    {
        public List<Item> at = new List<Item>();    //тот самый односвязный список
        public AllItems()   //при создании экземляра класса AllItems создает все предметы и дает им тип предмета
        {
            at.Add(new Item() { name = "Меч", type = "Оружие", damage = -25 });
            at[0].ItemType();
            at.Add(new Item() { name = "Элексир здоровья", type = "Элексир", damage = 25 });
            at[1].ItemType();
            at.Add(new Item() { name = "Камень", type = "Хлам" });
            at[2].ItemType();
        }

    }
    public class Person //класс игрока или моба гумоноидного тип. Еще не придаманы рассы
    {
        AllItems items = new AllItems();    //добавляем игроку или мобу предметы, чтобы потом можно было их добавлять, и еще нет передачи между мобами или игроками, или поднятия с земли.
        public Item[] outfit = new Item[5];
        public string name; //имя лол
        public string sex;  //пол
        int healthPointMax = 100;   //максимальное колличество здоровья которое может иметь игрок
        int healthPoint = 100;  //колличество здоровья на данный момент
        bool dead = false;  //мертв игрок или нет

        public List<Item> inventory = new List<Item>();    //инвентарь

        public void PutOn(string name)   //Метод для надивания экипировки (не готов)
        {
            
        }
        public void PutOnHel()   //Метод для надивания шлема (не готов)
        {

        }
        public void PutOnBib()   //Метод для надивания нагрудника (не готов)
        {

        }
        public void PutOnLeg()    //Метод для надивания поножей (не готов)
        {

        }
        public void PutOnBoot()    //Метод для надивания обуви (не готов)
        {

        }
        public void TakeWeapon()    //Метод для взятие в руку оружия (не готов) (сделаю потом просто две руки)
        {

        }
        public void CheckDead() //проверяем жив ли игрок по очкам здоровья
        {
            if (healthPoint <= 0)
                dead = true;
            else
                dead = false;
        }
        public void AddItem(int number, int kolvo = 1)    //метод для добавления предмета в инвентарь (поиск по уже известному ID) (вещи стакаются)
        {
            if (number >= 0 && number <= items.at.Count)
            {
                string name = items.at[number].name;    //узнаем и присваиваем имя предмета из списка со всеми вещами
                try
                {
                    int num = Convert.ToInt32(SearchIdItem(name));    //узнаем наличие нужного предмета, чтобы застакать все в одной кучке
                    inventory[num].numbers += kolvo;    //если все таки предмет есть то мы инкриментируем numbers в инвентаре
                }
                catch
                {
                    if (kolvo > 1)
                    {
                        inventory.Add(items.at[number]);   //добавляем этот самый предмет
                        inventory[inventory.Count - 1].numbers += kolvo - 1;
                    }
                    else
                    {
                        inventory.Add(items.at[number]);
                    }
                }
            }
        }
        
        public void AddItem(string name, int kolvo = 1)    //метод для добавления предмета в инвентарь (поиск по уже известному имен) (вещи стакаются)
        {
            int num;    //переменная в которой будет храниться значение ID предмета в главном списке Items.at
            try
            {
                num = Convert.ToInt32(SearchIdAT(name));    //происходит поиск есть ли этот предмет вообще, и если есть то какой ID (если нет то ошибка при попытки приоьразовать string в int)
                int num2;   //переменная в которой будет храниться значение ID предмета в inventory
                try
                {
                    num2 = Convert.ToInt32(SearchIdItem(name));    //происходит поиск, если предмет есть то мы получаем ID в противном свлучае ошибка
                    inventory[num2].numbers += kolvo;    //инкрементируем значение переменной numbers для того, чтобы стакать предметы
                }
                catch
                {
                    if (kolvo > 1)
                    {
                        inventory.Add(items.at[num]);   //добавляем этот самый предмет
                        inventory[inventory.Count - 1].numbers += kolvo - 1;
                    }
                    else
                    {
                        inventory.Add(items.at[num]);
                    }
                }
            }
            catch
            {

            }
        }
        public void DelItem(int number, int kolvo = 1)
        {
            if (number >= 0 && number <= items.at.Count)
            {
                string name = items.at[number].name;
                try
                {
                    int num = Convert.ToInt32(SearchIdItem(name));
                    if (inventory[num].numbers - kolvo < 1)
                    {
                        inventory.Remove(num);
                    }
                    else
                    {
                        inventory[num].numbers -= kolvo;
                    }
                }
                catch
                {
                    
                }
            }
        }
        public string SearchIdItem(string name)
        {
            int numL = items.at.Count;
            for (int l = 0; l < numL; l++)
            {
                if (name == inventory[l].name)
                {
                    return Convert.ToString(l);
                }
            }
            return "NO";
        }
        public string SearchIdAT(string name)
        {
            int numL = items.at.Count;
            for (int i = 0; i < numL; i++)
            {
                if (name.ToLower() == items.at[i].name.ToLower())
                {
                    return Convert.ToString(i);
                }
            }
            return "NO";
        }
    }

введите сюда описание изображения


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

Автор решения: Igor
inventory.RemoveAt(num);

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.removeat


    public int SearchIdItem(string name)
    {
        int numL = items.at.Count;
        for (int l = 0; l < numL; l++)
        {
            if (name == inventory[l].name)
            {
                return l;
            }
        }
        return -1;
    }
→ Ссылка