2012-03-18 14 views
0

WindowsPhoneアプリケーションのSilverlightアプリケーションから自分のコードの一部を使用しようとしています。しかし、私は他の何かと動的キーワードを置き換える問題があるので、私のコードはまだコンパイルと動作します。 私はこのリストには、私はこのコードWindowsPhoneの動的キーワードを置き換える方法

foreach (var action in _awaitingActionsList) 
{ 
    InvokeAction(action) 
} 
を使用してデリゲートを呼び出す私のクラスの他の部分では、この署名

Action<T> where T: class 

のデリゲートを格納するために使用される動的オブジェクト

private readonly List<dynamic> _awaitingActionsList = new List<dynamic>(); 

のリストを持っています

InvokeAction関数は次のようになります

public void InvokeAction<T>(Action<T> action) 
{ 
    action.Invoke(someObject); 
} 

動的キーワードのおかげで、このコードはSilverlight上でうまくいきましたが、動的キーワードはWindows Phoneには存在しませんでしたので、置き換える方法が不思議でした。

InvokeAction<SomeType>(val => val.DoStuff(param)); 
+0

'someObject'が' T'でない場合はどうなりますか? – SLaks

答えて

0

あなたはList<Delegate>を使用してDynamicInvokeメソッドを呼び出すことができます。私はこのように機能するために、デリゲートを渡すことができますおかげでジェネリックを使用するので、関数InvokeActionの署名を変更したいと行動しないでください。

遅くなりますが、dynamicも遅くなります。
(どちらが遅いのか分かりません)

+0

答えていただきありがとうございますが、ラムダ式構文を使用できるように関数(InvokeAction)を変更する方法がわかりません。 – John

+0

@ジョン:2番目のオーバーロードを追加します。 – SLaks

関連する問題