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

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

適用対象