2011-08-10 8 views
1

C#プログラムで異なるSOAP Webサービスを要求し、それぞれの結果(Webservice1[]およびWebservice2[])を異なるクラスで処理しますが、それぞれの配列を同じ配列またはList<T>の項目にラップします。C#で異なる配列型を格納する

どうすればよいですか?

よろしく ルネそれは文脈上のビットを依存

+1

彼らは同じ基本クラス/インターフェースを持っていますか? –

+0

いいえ、それらは異なる基本クラスを持っていません。私は、同じ関数内でArrayを扱うためのリストまたは配列の配列を必要としています。私はリフレクション上の小道具/値のリストを作成するためのラッパークラスを作成できますか?簡単な方法があるのですか、自分のクラスを作成しますか? – kockiren

+0

リストのようなタイプはありますか kockiren

答えて

3

; pは、彼らがまったく同じ APIを使用している場合、すなわち、それらは、2つのエンドポイントで同じサービスがあり、多分サービスを使用(および変更URLを手動で)、またはサービス間で型を再利用できるWCFを使用します。

しかし、より一般的なアプローチは、両方作る共通のインターフェイスを実装し、それらの両方は、あなたが気に.Foo性質を持っている場合、すなわち、あなたが行うことができるはずしpartial classを利用するために、次のようになります。

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[]を持ち、Webservice1またはWebservice2のインスタンスを追加し、それぞれのインスタンスに.Fooプロパティを追加できます。

別のアプローチは、当然のことながら、dynamic[]を使用することで、なデータとして、リフレクションを使用して何と一緒に(あなたが.Fooにアクセスすることを可能にする、その過程で窓の外の安全を入力投げることになりますバインディングなど)。

0

可能かどうかわかりませんが、オブジェクト[]のようなものを返すことはできますか?これにより、カスタム基本クラスを作成する必要がなくなります。それ以外の場合は、おそらくWebservice1とWebservice2の基本クラスを作成すると、Baseclass []のようなものを返すことができます。あなたはWCF、DataContracts、および継承を見ましたか?それはあなたに、これらの種類のものを扱うためのより良いフレームワークを可能にするかもしれません。

関連する問題