2011-08-10 40 views
1

我在C#程序中请求不同的SOAP Web服务,并在不同的类中处理每个结果(Webservice1[]Webservice2[]),但我想将每种类型的数组包装到相同的数组或List<T>项目中。在C#中存储不同的数组类型

我该怎么做,有什么建议?

问候 刘若英

+1

它们是否具有相同的基类/接口? –

+0

不,他们有不同的基类。我只想要一个列表或一组项目来处理相同的函数中的数组。我可以创建一个包装类来创建反射的prop/value列表?有没有简单的方法,或者我创建一个自己的类? – kockiren

+0

是否有类似列表 kockiren

回答

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,但它抛出一个类型安全窗外的过程中(与使用反射任何东西一起,如数据绑定等)。

0

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

相关问题