次の方法で共有


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

}  

次のコード例は比較目的で提供されるものです。 この 2 番目の例では、Add<TLeft,TRight,TResult> 式アクティビティをインスタンス化することによって合計を計算する方法を示します。 2 つの例は機能的には同等です。しかし、2 番目のアプローチは、最初の例より多くのコーディングを伴い、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>>)

ワークフロー環境対応式への参照をアクティビティ ツリーに変換します。

適用対象