gpt4 book ai didi

c# - 如何创建排序策略枚举

转载 作者:行者123 更新时间:2023-11-30 19:29:33 24 4
gpt4 key购买 nike

我正在尝试编写一个可以同时接收集合和排序策略的排序方法。

我可以简单地接收一个 IComparer,但我更希望有一个可能的排序策略的枚举。来电者必须从那里选择他们的电话。

类似于:

public enum SortingStrategies { ByAgeDesc, ByAgeAsc, ByIncomeDesc, ByInconmeAsc };

其中的每一个(ByAgeDesc、ByAgeAsc...)都是一个 IComparer。

然后调用排序方法将是:

myObject.SortCollection(myCollection, SortingStrategies.ByIncomeDesc);

是否可以创建实例枚举?这是个好主意吗?

提前致谢!

最佳答案

我不会为此使用直接枚举。我会创建一堆 IComparer<T>可供选择的实现:

public static class SortingStrategy
{
public static readonly IComparer<Person> ByAgeDescending = ...;
public static readonly IComparer<Person> ByAgeAscending = ...;
public static readonly IComparer<Person> ByIncomeDescending = ...;
public static readonly IComparer<Person> ByIncomeAscending = ...;
}

...或者很可能使用组合来完成升序/降序部分(例如,通过 IComparer<T> 上的扩展方法来创建反向包装器)。

当然,这不会强制调用者使用您预定义的值之一。你可以通过使用你自己的类来强制它:

public abstract class SortingStrategy : IComparer<Person>
{
public static readonly SortingStrategy ByAgeDescending = ...;
public static readonly SortingStrategy ByAgeAscending = ...;
public static readonly SortingStrategy ByIncomeDescending = ...;
public static readonly SortingStrategy ByIncomeAscending = ...;

private SortingStrategy() {}

private class ByAgeStrategy : SortingStrategy { ... }
private class ByIncomeStrategy : SortingStrategy { ... }
}

这里私有(private)构造函数阻止任何其他子类,但私有(private)嵌套类仍然可以子类化它,因为它们可以访问构造函数。

然后您可以让您的方法采用 SortingStrategy而不仅仅是 IComparer<T> .

当然,正如 James 所建议的,从长远来看,使用 LINQ 可能会更加灵活。这取决于您的目标。

关于c# - 如何创建排序策略枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11933867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com