我如何使用 bool 标志来决定是否在 MyComparer class 中使用反向?

How can I use a bool flag to decide if to use reverse or not in the MyComparer class?

private class MyComparer : IComparer<string>
        {
            [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
            private static extern int StrCmpLogicalW(string psz1, string psz2);

            public int Compare(string psz1, string psz2)
            {
                return -StrCmpLogicalW(psz1, psz2);
            }
        }

当我在 return 行中添加减号时,它会将数组从最后一项排序到第一项。 如果没有减号,它将对数组进行排序,并保持从第一个到最后一个的顺序。

减号只是让排序也颠倒了数组。

我想以某种方式生成一个布尔值,这样我就可以select是否反转数组。

用法:

Array.Sort(files, new MyComparer());

我希望能够通过设置 true 或 false 来决定是否反转它,例如:

Array.Sort(filesRadar, new MyComparer(false));

如果 false 不反转它 return 没有减号如果 true 加减号。

尝试这样的事情:

bool SortArrayReversed = false;

if(SortArrayReversed == false)
{
   Array.Sort(files);
}
else
{
   Array.Sort(-files);
}

当您想切换数组的排序方式时,只需更改 SortArrayReversed 值即可。

您可以将 reverse 传递给 构造函数 :

    private class MyComparer : IComparer<string>
    {
        // We may want to get rid of creation (see @aybe comment below) 
        public static readonly MyComparer Ascending = new MyComparer();

        public static readonly MyComparer Descending = new MyComparer(false); 

        [DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        private static extern int StrCmpLogicalW(string psz1, string psz2);

        public int Compare(string psz1, string psz2)
        {
            return (Reverse ? -1 : 1) * StrCmpLogicalW(psz1, psz2);
        }

        public MyComparer(bool reverse) {
          Reverse = reverse;
        }

        public MyComparer() 
          : MyComparer(false) {}

        public bool Reverse {get; private set;} 
    }

那你可以把

    Array.Sort(filesRadar, new MyComparer(false));

甚至

    Array.Sort(filesRadar, MyComparer.Ascending);