Смею предположить, что имеется ввиду следующее:
1) Настоящая реализация должна использовать файловую систему для хранения файлов;
2) Ваша (чтобы не мусорить файлами на диске) хранит все эти байты в памяти.
Т.е. вы вместо FileRepository делаете MemoryRepositiory
Потому что Encoding.Unicode - это UTF-16 и в нём просто текст @#$^@ не эквивалентен тому же самому в байтах (можете попробовать сами сконвертировать этот стринг в байты). Скорее всего вам нужно использовать энкодер UTF-8.
inv.AddItem(0, inv.items[1], 1);
Вы только что создали пустой инвентарь, но пытаетесь добавить (хотя по коду заменить) нулевой элемент первым элементов.
Откуда берётся первый элемент для замены?
Откуда берётся нулевой элемент под замену?