ExpressionServices Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
API, используемый для преобразования выражений, учитывающих среду, в дерево действий.
public ref class ExpressionServices abstract sealed
public static class ExpressionServices
type ExpressionServices = class
Public Class ExpressionServices
- Наследование
-
ExpressionServices
Примеры
В следующем примере кода вызывается Convert для расчета суммы элемента массива с индексом 0 и элемента массива с индексом 1. Затем полученная сумма присваивается переменной и выводится на консоль.
public static void ComputeSumWithConvert()
{
var arrayvar = new Variable<int[]>("arrayvar", new int[] { 1, 2 });
var intvar = new Variable<int>("intvar");
// Use ExpressionServices.Convert() to convert the composite lambda expression
// that represents the sum of array elements at index 0 and 1.
Activity<int> activity1 = ExpressionServices.Convert<int>(ctx => arrayvar.Get(ctx)[0] + arrayvar.Get(ctx)[1]);
Activity seq = new Sequence
{
Variables = { arrayvar, intvar },
Activities =
{
// Get the sum value.
new Assign<int>
{
To = intvar,
Value = activity1,
},
// Print the sum value of 3 to the console.
new WriteLine
{
Text = new InArgument<string>(ctx => intvar.Get(ctx).ToString()),
},
}
};
WorkflowInvoker.Invoke(seq);
}
Следующий пример кода предоставлен для сравнения. Во втором примере показывается вычисление суммы путем создания экземпляра действия выражения Add<TLeft,TRight,TResult>. Эти два примера функционально эквивалентны, но второй метод требует дополнительного программирования и отличается большей сложностью, чем вызов Convert. Поэтому рекомендуется использовать первый пример.
public static void ComputeSumWithExpressionActivity()
{
var arrayvar = new Variable<int[]>("arrayvar", new int[] { 1, 2 });
var intvar = new Variable<int>("intvar");
// Create an Add activity to compute the sum of array elements at index 0 and 1.
Activity<int> activity1 = new Add<int, int, int>
{
Left = new ArrayItemValue<int>
{
Array = arrayvar,
Index = 0,
},
Right = new ArrayItemValue<int>
{
Array = arrayvar,
Index = 1,
}
};
Activity seq = new Sequence
{
Variables = { arrayvar, intvar },
Activities =
{
// Get the sum value.
new Assign<int>
{
To = intvar,
Value = activity1,
},
// Print the sum value of 3 to the console.
new WriteLine
{
Text = new InArgument<string>(ctx => intvar.Get(ctx).ToString()),
},
}
};
WorkflowInvoker.Invoke(seq);
}
Комментарии
Методы преобразования в этом классе преобразуют указанные лямбда-выражения, которые могут содержать несколько вложенных выражений, в деревья действий, состоящие из иерархии действий. Настоятельно рекомендуется использовать эти методы преобразования вместо создания экземпляров действий выражений напрямую, поскольку эти методы позволяют обеспечить более высокий уровень абстракции и позволяют реализовать рабочие процессы более интуитивно понятным образом. Дополнительные сведения см. в примерах.
Методы преобразования в ExpressionServices предназначены для работы с переменными и константами, определенными в рабочем процессе или переданными в рабочий процесс в виде аргументов.
Методы
Convert<TResult>(Expression<Func<ActivityContext,TResult>>) |
Преобразует выражение, учитывающее среду рабочего процесса, в дерево действий. |
ConvertReference<TResult>(Expression<Func<ActivityContext,TResult>>) |
Преобразует ссылку на выражение, учитывающее среду рабочего процесса, в дерево действий. |
TryConvert<TResult>(Expression<Func<ActivityContext,TResult>>, Activity<TResult>) |
Преобразует выражение, учитывающее среду рабочего процесса, в дерево действий. |
TryConvertReference<TResult>(Expression<Func<ActivityContext,TResult>>, Activity<Location<TResult>>) |
Преобразует ссылку на выражение, учитывающее среду рабочего процесса, в дерево действий. |