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

如何让单个C#函数返回不同类型?JSON数据读取场景

解决方案:用泛型方法合并重复逻辑

你完全可以通过泛型方法来合并这两个重复的异步逻辑,不需要让Employee和Payroll继承共同基类,泛型本身就能支持任意可被Json反序列化的类型。

泛型实现代码

using System.IO;
using Newtonsoft.Json;

public async Task<List<T>> ReadAllAsync<T>(string fileName)
{
    // 用Path.Combine替代字符串拼接,避免路径分隔符问题
    string fullPath = Path.Combine(_filePath, fileName);
    string returnText = await File.ReadAllTextAsync(fullPath);

    if (!string.IsNullOrEmpty(returnText))
    {
        List<T>? result = JsonConvert.DeserializeObject<List<T>>(returnText);
        if (result != null)
            return result;
    }

    // 和原逻辑保持一致,返回包含默认值(引用类型为null)的列表
    return new List<T> { default };
}

调用方式

原来的两个方法的功能可以通过以下方式调用:

  • 读取所有员工数据:
    await ReadAllAsync<Employee>("Employees.json");
    
  • 读取所有薪资数据:
    await ReadAllAsync<Payroll>("Payrolls.json");
    

补充说明

  1. 为什么用object不行?
    用object作为返回类型的话,调用方需要手动强制转换类型,不仅代码繁琐,还会丢失编译时的类型检查,容易引发运行时错误。泛型则能在编译阶段就确定类型,既安全又简洁。
  2. 可选优化:
    原代码返回[null]的逻辑如果不符合实际业务需求,可以改成返回空列表new List<T>(),避免后续处理时遇到null元素的问题。

内容的提问来源于stack exchange,提问作者hub.sok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:20:07