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

如何在C#方法中实现返回两种不同类型的结果

方案说明

C# 是强类型语言,方法返回值类型必须固定,你原来的写法定义返回类型为IEnumerable<Utilisateur>,自然无法返回字符串类型的错误信息。这类「成功返回业务数据、失败返回错误信息」的场景,行业通用做法是用泛型结果包装类实现,泛型在这里的作用是让同一个包装类可以适配不同类型的返回数据,同时保证编译期类型安全,不需要手动做类型转换。

第一步:定义通用泛型结果包装类

public class ServiceResult<T>
{
    /// <summary>
    /// 操作是否成功
    /// </summary>
    public bool IsSuccess { get; set; }
    /// <summary>
    /// 成功时返回的业务数据,类型和传入的泛型参数一致
    /// </summary>
    public T? Data { get; set; }
    /// <summary>
    /// 失败时的错误提示
    /// </summary>
    public string? ErrorMessage { get; set; }

    // 封装快捷构造方法,减少重复代码
    public static ServiceResult<T> Success(T data) => new()
    {
        IsSuccess = true,
        Data = data
    };

    public static ServiceResult<T> Fail(string errorMsg) => new()
    {
        IsSuccess = false,
        ErrorMessage = errorMsg
    };
}

第二步:修改你的服务方法返回值和逻辑

把方法返回值从Task<IEnumerable<Utilisateur>>替换为Task<ServiceResult<IEnumerable<Utilisateur>>>即可:

public async Task<ServiceResult<IEnumerable<Utilisateur>>> AllUtilisateur(FormUserDTO formUserDTO)
{
    // 这里替换为你实际的用户查询逻辑
    IEnumerable<Utilisateur>? user = await GetUsersFromDb(formUserDTO);
    if(user != null)
    {
        // 正常场景返回用户列表
        return ServiceResult<IEnumerable<Utilisateur>>.Success(user);
    }
    // 异常场景返回错误信息
    return ServiceResult<IEnumerable<Utilisateur>>.Fail("未查询到匹配的用户数据");
}

第三步:调用方法的示例

var result = await userService.AllUtilisateur(formDto);
if(result.IsSuccess)
{
    // 直接拿到强类型的用户列表,不需要类型转换
    IEnumerable<Utilisateur> userList = result.Data;
    // 处理正常业务逻辑
}
else
{
    // 取错误信息做提示
    string error = result.ErrorMessage;
    // 处理错误逻辑
}

泛型逻辑简单说明

你定义ServiceResult<T>时T是类型占位符,当你指定T为IEnumerable<Utilisateur>时,编译器会自动生成对应类型的实体类,Data属性的类型就固定为IEnumerable<Utilisateur>,编译阶段就会做类型校验,既保证了通用性(其他返回List<Role>、int之类的方法也可以复用这个包装类),又避免了运行时类型转换错误。


内容的提问来源于stack exchange,提问作者Péah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:36:05