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>>)

Преобразует ссылку на выражение, учитывающее среду рабочего процесса, в дерево действий.

Применяется к