【发布时间】:2018-11-02 16:30:34
【问题描述】:
我正在使用具有多个不同“服务”(到目前为止大约 10 个)的客户端 API,每个都作为自己的命名空间导入。他们的标准 API 调用模式的一部分涉及返回一组错误消息:
public class Error {
public String ErrorMessage {get;set}
public int errorNumber {get;set}
..etc
}
我一直在努力清理和统一我们对这些消息的处理。我尝试制作一个函数来处理它们,例如:
void CheckErrors(List<Error> errors) {
if(errors != null && errors.Count() > 0)
throw new Exception(errors.First().ErrorMessage);
}
(实际功能更复杂,但给出了大致思路)
然而,事实证明,他们的每一项服务都有自己的(相同的)这个 Error 类的定义。在 C++ 中,我可以只对这个函数进行模板化,它可以正常工作,或者在动态语言中它可以正常工作,但在 C# 中,我无法找到一种方法来做到这一点,而无需制作 10 多个相同函数的副本, 每个在 Error 类型上都有不同的命名空间。
在我自己的代码中,我可以为这些类添加一个接口,但由于这不是我的代码,我认为你不能在 C# 中做到这一点?我可以创建一个继承自其中每一个并实现接口的包装器类,但我仍然为每个命名空间/服务遇到重复代码。
有没有更简洁的方法来处理这个问题?
【问题讨论】:
-
您如何引用这些服务?如果是使用visual studio的服务参考,可以使用the solution I've got for my (similar, not sure if it's a dupe) question.
-
你能用
List<dynamic>吗? -
您可以创建一个
ErrorWrapper类,为每种源错误类型提供一个构造函数,然后在整个代码中使用该统一错误包装器。 -
您可以创建一个唯一类型作为共享块包,或将它们反序列化为您的 c# 代码中的同一类
-
如果生成了 API(例如服务引用),您可能能够在生成过程中合并类型。见this question 和这个article on sharing types between client and server
标签: c#