在C#中存储不同的数组类型

时间:2011-08-10 07:28:54

标签: c# .net arrays web-services list

我在C#Programm中请求不同的SOAP Web服务并处理不同类中的每个结果(Webservice1[]Webservice2[]),但我想将每种类型的数组包装到同一个数组中或{{1}项目。

我怎么能这样做,有什么建议吗?

此致 雷

2 个答案:

答案 0 :(得分:3)

它取决于上下文; p如果他们有完全相同的 API,即它们在两个端点是相同的服务,那么可以使用一个服务(和手动更改URL,或使用可以在服务之间重用类型的WCF。

然而,更通用的方法是利用partial class来实现一个公共接口,即如果它们都具有您关心的.Foo属性,您应该能够:

namespace SomeNamespace {
    public interface ICommon {
        int Foo {get;}
    }
}
namespace Webservice1Namespace {
    partial class Webservice1 : ICommon {  }
}
namespace Webservice2Namespace {
    partial class Webservice2 : ICommon {  }
}
// note we didn't add a .Foo implementation - that comes from the
// *other* half of the partial classes, as per the .designer.cs

这使用隐式接口实现将FooWebservice1Webservice2映射到ICommon。现在,您可以拥有ICommon[]并添加Webservice1Webservice2的实例,并访问每个的.Foo属性。

另一种方法当然是使用dynamic[]允许您访问.Foo,但是它会将窗口中的类型安全性抛出进程(以及使用反射的任何东西,例如数据绑定等)。

答案 1 :(得分:0)

不确定是否可能,但你可以尝试返回像object []这样的东西吗?这样就不需要创建自定义基类。否则,也许为Webservice1和Webservice2创建基类将允许您返回类似Baseclass []的内容。你看过WCF,DataContracts和继承吗?它可能会让你有一个更好的框架来处理这些事情,imho。