这并不一定回答原问题,但它在某种程度上扩展了一些可能性。我发布这篇文章是为了防止其他人遇到类似的问题。
此处提供的解决方案概述了一个通用的按选项排序方法,在其他情况下可能会有用。在本例中,我想通过不同的属性对文件列表进行排序。
public class GenericCompare<T> : IComparer<T>
{
private Func<T, T, int> ComparerFunction { set; get; }
public GenericCompare(Func<T, T, int> comparerFunction)
{
ComparerFunction = comparerFunction;
}
public int Compare(T x, T y)
{
if (x == null || y == null)
{
if (y == null && x == null) { return 0; }
if (y == null) { return 1; }
if (x == null) { return -1; }
}
try
{
return ComparerFunction(x, y);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
return 0;
}
}
然后在实施过程中...
GenericCompare<FileInfo> DefaultComparer;
if (SortOrder == SORT_FOLDER_FILE)
{
DefaultComparer = new GenericCompare<FileInfo>((fr1, fr2) =>
{
return fr1.FullName.ToLower().CompareTo(fr2.FullName.ToLower());
});
}
else if (SortOrder == SORT_SIZE_ASC)
{
DefaultComparer = new GenericCompare<FileInfo>((fr1, fr2) =>
{
return fr1.Length.CompareTo(fr2.Length);
});
}
else if (SortOrder == SORT_SIZE_DESC)
{
DefaultComparer = new GenericCompare<FileInfo>((fr1, fr2) =>
{
return fr2.Length.CompareTo(fr1.Length);
});
}
else
{
DefaultComparer = new GenericCompare<FileInfo>((fr1, fr2) =>
{
return fr1.Name.ToLower().CompareTo(fr2.Name.ToLower());
});
}
var ordered_results = (new DirectoryInfo(@"C:\Temp"))
.GetFiles()
.OrderBy(fi => fi, DefaultComparer);
最大的优点是您不需要为每个排序情况创建新类,您只需连接一个新的lambda即可。显然,这可以在各种方式下扩展,因此希望它能够帮助某个人,在某个地方,在某个时候。