是否可为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
相关产品推荐
相关产品推荐

