You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调度服务如何通过单方法处理两个相似领域类的列表生成需求

最优解决方案:泛型方法+公共接口

这个方案既能完全复用逻辑,又能保证两个领域类的数据隔离,是C#中处理同类场景的标准实现方式。

实现步骤

  1. 定义公共接口提取共有属性
    把两个领域类中过滤逻辑需要用到的所有公共属性,封装到同一个接口里,再让两个类分别实现该接口:
// 公共接口:存放两个类共有的属性(所有Where条件用到的属性都要放到这里)
public interface ISchedulingItem
{
    DateTime AppointmentTime { get; set; }
    string ContactPhone { get; set; }
    int OrderStatus { get; set; }
    // 其他需要用到的公共属性按需补充
}

// 确认类实现接口
public class ConfirmationItem : ISchedulingItem
{
    // 确认类独有的属性
    public DateTime ConfirmExpireTime { get; set; }
    
    // 实现接口的公共属性
    public DateTime AppointmentTime { get; set; }
    public string ContactPhone { get; set; }
    public int OrderStatus { get; set; }
}

// 改期类实现接口
public class ReschedulingItem : ISchedulingItem
{
    // 改期类独有的属性
    public DateTime OriginalAppointmentTime { get; set; }
    
    // 实现接口的公共属性
    public DateTime AppointmentTime { get; set; }
    public string ContactPhone { get; set; }
    public int OrderStatus { get; set; }
}
  1. 编写泛型复用逻辑
    写一个泛型服务方法,给泛型参数加「必须实现ISchedulingItem」的约束,即可在方法内直接使用公共属性写统一的过滤逻辑:
// 统一的列表生成方法,泛型参数T对应具体的领域类
public List<T> GenerateSchedulingItemList<T>() where T : ISchedulingItem
{
    // 泛型参数自动匹配对应数据表,过滤逻辑完全复用
    return GenericRepository.Table<T>()
        .Where(item => item.OrderStatus == 1 && item.AppointmentTime > DateTime.Now.AddHours(2))
        // 你原有的其他过滤、排序逻辑都可以放在这里
        .ToList();
}
  1. 按场景调用方法
    需要生成对应列表时,直接给泛型方法传入对应的领域类即可:
// 生成待确认列表
var confirmationList = GenerateSchedulingItemList<ConfirmationItem>();
// 生成待改期列表
var reschedulingList = GenerateSchedulingItemList<ReschedulingItem>();

方案优势

  • 完全满足数据隔离要求:两个领域类完全独立,各自的独有属性互不干扰,不会出现业务数据混淆的问题
  • 逻辑100%复用:过滤、排序等逻辑只需要维护一份,后续修改规则不需要同时改两个方法,避免出现逻辑不一致的问题
  • 类型安全:编译阶段就会做类型校验,不会出现运行时类型转换报错的问题

内容的提问来源于stack exchange,提问作者Craig5117

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:05