Amoeba.Windows.StoreCategorizeTreeViewModel.Sort C# (CSharp) Метод

Sort() приватный Метод

private Sort ( ) : void
Результат void
        private void Sort()
        {
            var list = _children.Cast<TreeViewModelBase>().ToList();

            list.Sort((x, y) =>
            {
                if (x is StoreCategorizeTreeViewModel)
                {
                    if (y is StoreCategorizeTreeViewModel)
                    {
                        var vx = ((StoreCategorizeTreeViewModel)x).Value;
                        var vy = ((StoreCategorizeTreeViewModel)y).Value;

                        int c = vx.Name.CompareTo(vy.Name);
                        if (c != 0) return c;
                        c = vx.StoreTreeItems.Count.CompareTo(vy.StoreTreeItems.Count);
                        if (c != 0) return c;
                        c = vx.GetHashCode().CompareTo(vy.GetHashCode());
                        if (c != 0) return c;
                    }
                    else if (y is StoreTreeViewModel)
                    {
                        return -1;
                    }
                }
                else if (x is StoreTreeViewModel)
                {
                    if (y is StoreTreeViewModel)
                    {
                        var vx = ((StoreTreeViewModel)x).Value;
                        var vy = ((StoreTreeViewModel)y).Value;

                        int c = vx.Signature.CompareTo(vy.Signature);
                        if (c != 0) return c;
                        c = vx.Boxes.Count.CompareTo(vy.Boxes.Count);
                        if (c != 0) return c;
                        c = vx.GetHashCode().CompareTo(vy.GetHashCode());
                        if (c != 0) return c;
                    }
                    else if (y is StoreCategorizeTreeViewModel)
                    {
                        return 1;
                    }
                }

                return 0;
            });

            for (int i = 0; i < list.Count; i++)
            {
                var o = _children.IndexOf(list[i]);

                if (i != o) _children.Move(o, i);
            }
        }