2016-03-20 17 views
0

私はDictionaryに1つのジェネリックパラメータを持つデリゲート(アクション)を保存したいと思っています。もしそれが可能であれば、コードスメール をダウン/アップキャストすることを避けたいと思います。ディクショナリに異なるパラメータを持つ汎用アクションを保存する方法は?

基本的には、ユーザーが REST APIから何かをリクエストし、正しいResponseオブジェクトをコールバックする、要求/応答コールバックマネージャを実装しています。一言で言えば、ユーザが呼び出すメソッドは、次のようになります。

void GetUser(int id, Action<GetUserResponse> callback);

私はその後、リクエストを送って、私の「コールバックマネージャー」へのコールバックを保存します。サーバ からの応答が来たら(ほとんどjson)、それをGetUserResponseオブジェクトに解析し、コールバックを起動します。しかし、多くの異なったものがあります 応答オブジェクトが異なる要求と、コールバックマネージャがそれらの優先度を付ける必要があります(他のものもあります) その要求のコールバックを格納するすべての単一要求に対して辞書を持つのではなく、 すべてのコールバック(および一意のID)を格納する1つのDictionaryを持っています。

基本的にはこのような何か:(明らかにそのように動作しません)

Dictionary<GUID,Action<T>> AllCallbacks;

は、「ユーザー側」に何かをキャストしなくても可能ということですか?

+0

応答オブジェクトに共通するものはありますか?それらのすべてに共通するインターフェースを作成できますか?残念なことに、 –

+0

多かれ少なかれ、要求に応じて異なるデータを保持するだけです – zlZimon

+0

保存する必要がある2種類の要求アクションオブジェクトの例を挙げることができますか? – mrahhal

答えて

1

Dictionary of Action<T> Delegatesをご覧ください。 利用可能なオプションのガイダンスを提供する必要があります。私はそこにシンプルでエレガントなソリューションがあるとは思わない。 Dictionary<GUID,Action<dynamic>> AllCallbacks;を使用できますが、それに応じてcheckとcastを入力する必要があります。

+0

リンクありがとうございました。唯一の違いは、1つのタイプに対して複数のデリゲートを持つことができることです。それは私の解決策をもう少し複雑にするだろう – zlZimon

関連する問題