我在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