Как да замените динамична ключова дума в WindowsPhone

Опитвам се да използвам част от моя код от приложение Silverlight в приложение за WindowsPhone. Въпреки това имам проблем със замяната на динамичната ключова дума с нещо друго, така че моят код все още се компилира и работи. Имам списък с динамични обекти

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

този списък се използва за съхраняване на делегати на този подпис

Action<T> where T: class

В друга част от моя клас извиквам делегатите, използвайки този код

foreach (var action in _awaitingActionsList)
{
    InvokeAction(action)
}

Функцията InvokeAction изглежда така

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

Благодарение на динамичната ключова дума този код работеше добре на Silverlight, но динамичната ключова дума не присъства в WindowsPhone, така че се чудех как да я заменя. Не искам да променя подписа на функцията InvokeAction, защото благодарение на използването на генерични и действия мога да предам делегати, за да функционират по следния начин:

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

person John    schedule 18.03.2012    source източник
comment
Ами ако someObject не е T?   -  person SLaks    schedule 18.03.2012


Отговори (1)


Можете да използвате List<Delegate> и да извикате метода DynamicInvoke.

Ще бъде бавен, но dynamic също е бавен.
(Не знам кое е по-бавно)

person SLaks    schedule 18.03.2012
comment
Благодаря за отговора, но нямам идея как да променя функцията си (InvokeAction), така че да мога да използвам синтаксиса на ламбда израза. - person John; 18.03.2012
comment
@John: Добавете второ претоварване. - person SLaks; 18.03.2012