如何让单个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");
补充说明
- 为什么用
object不行?
用object作为返回类型的话,调用方需要手动强制转换类型,不仅代码繁琐,还会丢失编译时的类型检查,容易引发运行时错误。泛型则能在编译阶段就确定类型,既安全又简洁。 - 可选优化:
原代码返回[null]的逻辑如果不符合实际业务需求,可以改成返回空列表new List<T>(),避免后续处理时遇到null元素的问题。
内容的提问来源于stack exchange,提问作者hub.sok
相关产品推荐
相关产品推荐

