Sdílet prostřednictvím


ExpressionServices Třída

Definice

Transformační rozhraní API sloužící k převodu výrazů pracujících s prostředím na strom aktivit.

public ref class ExpressionServices abstract sealed
public static class ExpressionServices
type ExpressionServices = class
Public Class ExpressionServices
Dědičnost
ExpressionServices

Příklady

Následující příklad kódu volá Convert pro výpočet součtu elementu array v indexu 0 a elementu array v indexu 1. Potom se výsledný součet přiřadí proměnné a vytiskne se do konzoly.

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

}  

Následující příklad kódu je k dispozici pro účely porovnání. Tento druhý příklad ukazuje, jak vypočítat součet vytvořením instance aktivity výrazu Add<TLeft,TRight,TResult> . Oba příklady jsou funkčně ekvivalentní, ale jak vidíte, druhý přístup zahrnuje více kódování a není tak jednoduchý jako volání Convert. Proto doporučujeme použít první příklad.

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

}  

Poznámky

Metody převodu v této třídě transformují zadané výrazy lambda, které mohou obsahovat více dílčích výrazů, na stromy aktivit složené z hierarchie aktivit. Důrazně doporučujeme používat tyto metody převodu místo vytváření instancí aktivit výrazů přímo, protože poskytují vyšší úroveň abstrakce a umožňují intuitivnější implementaci pracovního postupu. Další informace najdete v příkladech.

Metody převodu v nástroji ExpressionServices jsou navrženy tak, aby pracovaly s proměnnými a konstantami definovanými uvnitř pracovního postupu nebo předávaly do pracovního postupu prostřednictvím argumentů.

Metody

Convert<TResult>(Expression<Func<ActivityContext,TResult>>)

Převede výraz pracující s prostředím pracovního postupu na strom aktivity.

ConvertReference<TResult>(Expression<Func<ActivityContext,TResult>>)

Převede odkaz na výraz pracující s prostředím pracovního postupu na strom aktivity.

TryConvert<TResult>(Expression<Func<ActivityContext,TResult>>, Activity<TResult>)

Převede výraz pracující s prostředím pracovního postupu na strom aktivity.

TryConvertReference<TResult>(Expression<Func<ActivityContext,TResult>>, Activity<Location<TResult>>)

Převede odkaz na výraz pracující s prostředím pracovního postupu na strom aktivity.

Platí pro