我在C#程序中请求不同的SOAP Web服务,并在不同的类中处理每个结果(Webservice1[]
和Webservice2[]
),但我想将每种类型的数组包装到相同的数组或List<T>
项目中。在C#中存储不同的数组类型
我该怎么做,有什么建议?
问候 刘若英
我在C#程序中请求不同的SOAP Web服务,并在不同的类中处理每个结果(Webservice1[]
和Webservice2[]
),但我想将每种类型的数组包装到相同的数组或List<T>
项目中。在C#中存储不同的数组类型
我该怎么做,有什么建议?
问候 刘若英
这取决于上下文位; 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
这使用隐式接口实现将Foo
从Webservice1
和Webservice2
映射到ICommon
。现在您可以拥有ICommon[]
并添加Webservice1
或Webservice2
的实例,并访问各自的.Foo
属性。
另一种方法,当然是使用dynamic[]
,这将也允许您访问.Foo
,但它抛出一个类型安全窗外的过程中(与使用反射任何东西一起,如数据绑定等)。
不确定是否可能,但你可以尝试返回类似object []的东西吗?这将避免创建自定义基类的需要。否则,可能为Webservice1和Webservice2创建基类将允许您返回类似于Baseclass []的内容。你看过WCF,DataContracts和继承吗?它可能会让你有一个更好的框架来处理这些事情,imho。
它们是否具有相同的基类/接口? –
不,他们有不同的基类。我只想要一个列表或一组项目来处理相同的函数中的数组。我可以创建一个包装类来创建反射的prop/value列表?有没有简单的方法,或者我创建一个自己的类? – kockiren
是否有类似列表 –
kockiren