inv.AddItem(0, inv.items[1], 1);
Вы только что создали пустой инвентарь, но пытаетесь добавить (хотя по коду заменить) нулевой элемент первым элементов.
Откуда берётся первый элемент для замены?
Откуда берётся нулевой элемент под замену?
Так как вы пытаетесь нельзя.
Создайте класс хранилище, который будет всем желающим отдавать А или Б (в виде класса С). А при необходимости заменять их.
С какой целью интересуетесь?
Сама ссылка (это же просто адрес памяти, где находится начало объекта) занимает 32-бита или 64 бита, в зависимости от ОС. Но никакой практической пользы от этих знаний в контексте c# я не вижу.
У класса Console есть все нужные методы, и ждать нажатия клавиши, и установить курсор в нужную позицию и даже прочитать текущие координаты курсора, если вы их вдруг забыли сохранить.
Т.е. при нажатии вниз нужно:
- проверить, что вообще есть пункт ниже
- обновить текущую строку, чтобы убрать >
- обновить пункт нижи где отобразиться >
- ждем нажатия клавиши