Я пытаюсь добраться до объекта Cases.Values
объекта System.Activities.Statements.Switch. Проблема в том, что я не могу использовать объект Activity
во время выполнения до Switch<>
типа (который вытекает из него).Динамическое литье на общий тип
var switchType = activity.GetType();
bool isSwitch = (switchType.IsGenericType && switchType.GetGenericTypeDefinition() == typeof(Switch<>));
if (isSwitch)
{
Type[] genericArgumentTypes = switchType.GetGenericArguments();
if (genericArgumentTypes.Length > 0)
{
var switchStatement = (Switch<genericArgumentTypes[0]>) activity; //that's incorrect
foreach (var aCase in switchStatement.Cases.Values)
{
ProcessActivity(aCase, dataSets, context);
}
}
}
Кроме того,
dynamic switchStatement = activity;
foreach (var aCase in switchStatement.Cases.Values)
{
ProcessActivity(aCase, dataSets, context);
}
выдает ошибку, что свойство не существует, в то время как отладчик показывает, что это не так. T
не имеет значения для меня - мне нужна только коллекция Cases
.
EDIT
На самом деле, я нашел даже чистое решение, чем я установить в качестве ответа.
dynamic switchStatement = activity;
var cases = switchStatement.Cases as IEnumerable;
if (cases != null)
{
foreach (dynamic aCase in cases)
{
ProcessActivity(aCase.Value);
}
}
Как переменная 'activity' определяется? – Dennis
http://msdn.microsoft.com/en-us/library/vstudio/system.activities.activity(v=vs.100).aspx 'Switch <>' наследуется от класса 'Activity'. – Tarec