/* Fast sort, which works off data, rather than visual elements.
         * Since only 7 visual elements are allocated, this is required.
         */
        public List <ListElementController_BASE_NotListView> Sort(List <ListElementController_BASE_NotListView> items)
        {
            LogSpam($"Sorting: {items.Select(item => GetRef(item).ComponentDefID).ToArray().Dump(false)}");

            var sw  = Stopwatch.StartNew();
            var _a  = new ListElementController_InventoryGear_NotListView();
            var _b  = new ListElementController_InventoryGear_NotListView();
            var go  = new UnityEngine.GameObject();
            var _ac = go.AddComponent <InventoryItemElement_NotListView>(); //new InventoryItemElement_NotListView();
            var go2 = new UnityEngine.GameObject();
            var _bc = go2.AddComponent <InventoryItemElement_NotListView>();

            _ac.controller = _a;
            _bc.controller = _b;
            var _cs = new Traverse(inventoryWidget).Field("currentSort").GetValue <Comparison <InventoryItemElement_NotListView> >();
            var cst = _cs.Method;

            LogDebug(string.Format("Sort using {0}::{1}", cst.DeclaringType.FullName, cst.ToString()));

            var tmp = items.ToList();

            tmp.Sort(new Comparison <ListElementController_BASE_NotListView>((l, r) => {
                _ac.ComponentRef          = _a.componentRef = GetRef(l);
                _bc.ComponentRef          = _b.componentRef = GetRef(r);
                _ac.controller            = l;
                _bc.controller            = r;
                _ac.controller.ItemWidget = _ac;
                _bc.controller.ItemWidget = _bc;
                _ac.ItemType = ToDraggableType(l.componentDef);
                _bc.ItemType = ToDraggableType(r.componentDef);
                var res      = _cs.Invoke(_ac, _bc);
                LogSpam($"Compare {_a.componentRef.ComponentDefID}({_ac != null},{_ac.controller.ItemWidget != null}) & {_b.componentRef.ComponentDefID}({_bc != null},{_bc.controller.ItemWidget != null}) -> {res}");
                return(res);
            }));

            UnityEngine.GameObject.Destroy(go);
            UnityEngine.GameObject.Destroy(go2);

            var delta = sw.Elapsed.TotalMilliseconds;

            LogInfo(string.Format("Sorted in {0} ms", delta));

            LogSpam($"Sorted: {tmp.Select(item => GetRef(item).ComponentDefID).ToArray().Dump(false)}");

            return(tmp);
        }