私はがMessageRouterと呼ばれるクラスに入ってくるオブジェクトXMLシリアル化されたメッセージを持っています。 XMLには、それがシリアライズされた型名が含まれています。まで知られていない型に応じて、が異なるデリゲートメソッドを呼び出すことができる必要があります。その後、辞書<T>代表
myMessageRouter.RegisterDelegateForType(new Action<MySerializableType>(myActionHandler));
とタイプを格納します。私はMessageRouterはそうのようなRegisterDelegateForType方法を提供したいと思います...ので、うまくいけば、これは誰かに意味をなすだろうジェネリックに
極めて強くありませんよ、またはこのような辞書では、型の文字列表現:
Dictionary<Type, Action<T>> registeredDelegates;
その方法は、私はタイプの割り当てられたデリゲートを呼び出し、非直列化されたオブジェクトを渡して、次の擬似コードのような何かを行うことができます:
Type xmlSerializedType = TypeFromXmlString(incomingXml);
object deserializedObject = DeserializeObjectFromXml(xmlSerializedType, incomingXml);
// then invoke the action and pass in the deserialized object
registeredDelegates[xmlSerializedType](deserializedObject);
は、だから私の質問は以下のとおりです。
- はどのように辞書が移入値としてキーとして
Type
と汎用Action<T>
を含めることができ辞書を定義し、RegisterDelegateForType方法がありますか? - これができない場合は、これを行うにはどうすればよいでしょうか?
IDictionaryを辞書<タイプ、アクション>にしてみませんか? – thecoop
routeNpingmeがデリゲート型のvoidをサポートする必要があるかどうかを確認するのを待っていたとします。(T t);そうであれば、Dictionary >を使用することはできませんでした。このデザインは簡単に修正することができます。そうでなければ、辞書<タイプ、アクション>が最適です。彼がAction をサポートする必要があるとしても、Dictionary を使用していれば、デザインはより良いでしょう。 –
user152862