I found a vb.net that should renumber sheet sets

Code:
/*
 * © Andrey Bushman, 2013
 * AutoCAD 2014 x64 Enu
 * 
 * AutoCAD references:
 *
 * AcCoreMgd.dll
 * AcDbMgd.dll
 * AcMgd.dll
 * Interop.ACSMCOMPONENTS19Lib.dll
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using cad = Autodesk.AutoCAD.ApplicationServices.Application;
using App = Autodesk.AutoCAD.ApplicationServices;
using Db = Autodesk.AutoCAD.DatabaseServices;
using Ed = Autodesk.AutoCAD.EditorInput;
using Rtm = Autodesk.AutoCAD.Runtime;
using Comp = ACSMCOMPONENTS19Lib;
 
[assembly: Rtm.CommandClass(typeof(Bushman.AutoCAD.SheetSetEditor.Commands))]
 
namespace Bushman.AutoCAD.SheetSetEditor {
 
    public class Commands {
 
        const String ns = "bush"; // namespace
 
        [Rtm.CommandMethod(ns, "test", Rtm.CommandFlags.Modal)]
        public void Renumber() {
            App.Document doc = cad.DocumentManager.MdiActiveDocument;
            Db.Database db = doc.Database;
            Ed.Editor ed = doc.Editor;
            Comp.AcSmSheetSetMgr mng = new Comp.AcSmSheetSetMgr();
            Comp.IAcSmEnumDatabase enumerator = mng.GetDatabaseEnumerator();
            Comp.AcSmDatabase smDb = null;
            while ((smDb = enumerator.Next()) != null) {
                String fname = smDb.GetFileName();
                Comp.AcSmSheetSet sheetset = smDb.GetSheetSet();
                String name = sheetset.GetName();
                String descr = sheetset.GetDesc();
                ed.WriteMessage("\nSheet Set: {0}\n", name);
                Comp.IAcSmEnumComponent encomp = sheetset.GetSheetEnumerator();
                Comp.IAcSmComponent component = null;
                while ((component = encomp.Next()) != null) {
                    ProcessElement(ed, component, 0);
                }
                encomp.Reset();
            }
            enumerator.Reset();
        }
 
        // Recursive processing of the elements
        void ProcessElement(Ed.Editor ed, Comp.IAcSmComponent component, Int32 level) {
            ed.WriteMessage("\t{0}{1} (Subset)\n", new String('\t', level), component.GetName());
            Array array = null;
            component.GetDirectlyOwnedObjects(out array);
            if (array != null) {
                Int32 sheet_number = 0;
                foreach (var item in array) {
                    if (item is Comp.IAcSmSubset) {
                        ProcessElement(ed, (Comp.IAcSmSubset)item, level + 1);
                    }
                    else if (item is Comp.IAcSmSheet) {
                        Comp.IAcSmSheet sheet = (Comp.IAcSmSheet)item;
                        ed.WriteMessage("\t\t{0}{1} (Sheet)", new String('\t', level), sheet.GetName());
                        sheet.SetNumber(sheet_number.ToString()); // I get an exception here!
                        ++sheet_number;
                    }
                    else if (item is Comp.IAcSmPersist) {
                        Comp.IAcSmPersist persist = (Comp.IAcSmPersist)item;
                        ed.WriteMessage("\t\t{0}Additional info: {1}", new String('\t', level), persist.GetTypeName());
                    }
                    else {
                        ed.WriteMessage("\t\t{0}Unknown object: {1}", new String('\t', level), item.GetType().ToString());
                    }
                    ed.WriteMessage("\n");
                }
            }
        }
    }
}
...I tried convert this vb.net from 2013 to 2018,2019,2020, but I just can get errors. So, I need your help.