让我们说我们有一些类型定义如下:
public class BaseClass
{
public int Value { get; set; }
}
public class SubClassA : BaseClass
{
public bool SomeBoolValue { get; set; }
}
public class SubClassB : BaseClass
{
public decimal SomeDecimalValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我们像这样构造两个子类类型的列表
List<SubClassA> subClassAList = new List<SubClassA>
{
new SubClassA {SomeBoolValue = true, Value = 0},
new SubClassA {SomeBoolValue = true, Value = 2},
new SubClassA {SomeBoolValue = false, Value = 1},
};
List<SubClassB> subClassBList = new List<SubClassB>
{
new SubClassB {SomeDecimalValue = 1.3M, Value = 2},
new SubClassB {SomeDecimalValue = 3.5M, Value = 1},
new SubClassB {SomeDecimalValue = 0.2M, Value = 5},
};
Run Code Online (Sandbox Code Playgroud)
有没有办法可以实现一个可以在Value属性上过滤subClassAList和subClassBList的函数?我知道这可以通过转换函数的结果来实现,如下所示:
public static IEnumerable<BaseClass> OrderList(IEnumerable<BaseClass> list)
{
return list.OrderBy(x => x.Value);
}
...
...
orderedAList = OrderList(subClassAList)
.Cast<SubClassA>() //Don't like requiring a cast. Unsafe.
.ToList();
Run Code Online (Sandbox Code Playgroud)
但是接下来我们需要将结果转换回子类列表,这似乎不是非常类型安全的.我知道排序操作本身非常简单,它可能不保证单独的函数来执行操作,但如果您尝试执行比排序更复杂的操作,将逻辑包含到单个函数中会很有帮助/ class /无论为了实现它而不是复制代码.
您可以使用通用方法来完成此任务。
public static IEnumerable<T> OrderList<T>(IEnumerable<T> list) where T : BaseClass
{
return list.OrderBy(x => x.Value);
}
Run Code Online (Sandbox Code Playgroud)