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

是否可为C#泛型类型对象编写扩展方法实现类到Proto对象的映射?

你遇到的编译报错是因为扩展方法本身没有声明泛型参数,也没有携带对应的泛型约束,导致编译器无法识别Response<T>中的T类型。

修正后的扩展方法代码

// 方法声明处增加泛型参数<T>,并匹配Response<T>的泛型约束
public static ResponseReply ToProtoObject<T>(this Response<T> reply) 
    where T : BaseObjectBo
{
    ResponseReply answer = new() { 
        // 注意原代码这里属性名拼写错误,少了一个s,应为Success
        Success = reply.Success
    };
    if (reply.Object != null)
    {
        answer.ObjectId = reply.Object.Id.ToString();
    }

    if (reply.Messages != null)
    {
        answer.Messages.AddRange(reply.Messages.Select(x => x.ToProtoObject()));
    }

    return answer;
}

使用示例

// 假设你有一个继承自BaseObjectBo的业务类UserBo
Response<UserBo> bizResponse = GetUserInfo();
// 直接调用扩展方法即可正常转换
ResponseReply protoObj = bizResponse.ToProtoObject();

额外注意事项

  • 要确保Message类也已经实现了对应的ToProtoObject()扩展方法,否则代码中Select(x => x.ToProtoObject())部分会编译报错
  • 注意属性拼写不要出错,避免运行时赋值不符合预期

内容的提问来源于stack exchange,提问作者Jonas Van mullem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:57:03