2011-08-10 76 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。

相關問題