Export (0) Print
Expand All

OutArgument<T> Class

A binding terminal that represents the flow of data out of an activity.

Namespace:  System.Activities
Assembly:  System.Activities (in System.Activities.dll)

[ContentPropertyAttribute("Expression")]
[TypeConverterAttribute(typeof(OutArgumentConverter))]
public sealed class OutArgument<T> : OutArgument

Type Parameters

T

The data type of the OutArgument<T>.

The OutArgument<T> type exposes the following members.

  NameDescription
Public methodOutArgument<T>()Initialize a new instance of the OutArgument<T> class using default values.
Public methodOutArgument<T>(Activity<Location<T>>)Initializes a new instance of the OutArgument<T> class using the specified Activity<TResult>.
Public methodOutArgument<T>(DelegateArgument)Initializes a new instance of the OutArgument<T> class using the specified DelegateArgument.
Public methodOutArgument<T>(Expression<Func<ActivityContext, T>>)Initializes a new instance of the OutArgument<T> class using the specified expression.
Public methodOutArgument<T>(Variable)Initializes a new instance of the OutArgument<T> class using the specified Variable.
Top

  NameDescription
Public propertyArgumentTypeGets the data type for the data bound to this Argument. (Inherited from Argument.)
Public propertyDirectionGets an ArgumentDirection that specifies whether the Argument represents the flow of data into an activity, out of an activity, or both into and out of an activity. (Inherited from Argument.)
Public propertyEvaluationOrderGets or sets a zero-based value that specifies the order in which the argument is evaluated. (Inherited from Argument.)
Public propertyExpressionGets an Activity<TResult> that represents the value of this OutArgument<T>.
Top

  NameDescription
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Public methodStatic memberFromDelegateArgumentInitializes and returns a new OutArgument<T> constructed using the specified DelegateArgument.
Public methodStatic memberFromExpressionInitializes and returns a new OutArgument<T> constructed using the specified Activity<TResult>.
Public methodStatic memberFromVariableInitializes and returns a new OutArgument<T> constructed using the specified Variable.
Public methodGetGets the value of the OutArgument<T> using the specified activity context.
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetLocationGets the location of the value for the OutArgument<T>.
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Public methodSet(ActivityContext, Object)Sets the value of the argument using the specified activity context. (Inherited from Argument.)
Public methodSet(ActivityContext, T)Sets the value of the OutArgument<T> using the specified activity context.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

  NameDescription
Public operatorStatic memberImplicit(Activity<Location<T>> to OutArgument<T>)Initializes and returns a new OutArgument<T> constructed using the specified Activity<TResult>.
Public operatorStatic memberImplicit(DelegateArgument to OutArgument<T>)Initializes and returns a new OutArgument<T> constructed using the specified DelegateArgument.
Public operatorStatic memberImplicit(Variable to OutArgument<T>)Initializes and returns a new OutArgument<T> constructed using the specified Variable.
Top

An OutArgument<T> is used to flow data out of an activity. If the activity is the root activity of a workflow, then it is also used to flow data out of the workflow to the workflow host. In this example, a custom Divide activity that has two input arguments and one output argument is used as the root activity of a workflow. The host application passes two values into the workflow and then retrieves the result of the division after the workflow completes.

int dividend = 500;
int divisor = 36;

Dictionary<string, object> arguments = new Dictionary<string, object>();
arguments.Add("Dividend", dividend);
arguments.Add("Divisor", divisor);

IDictionary<string, object> outputs =
    WorkflowInvoker.Invoke(new Divide(), arguments);

Console.WriteLine("{0} / {1} = {2} Remainder {3}",
    dividend, divisor, outputs["Result"], outputs["Remainder"]);

The Divide activity uses arguments to receive the input values and to provide the computed result values. The Remainder OutArgument<T> is used to pass out the remainder of the division, and the Result output argument provided by Activity<TResult> derived activities is used to pass out the quotient.

NoteNote

If your custom activity is derived from the generic CodeActivity<TResult> with an Int32 as its generic type argument, when you invoke the activity with the WorkflowInvoker Invoke method, it returns an Int32 value. In Addition, the CodeActivity<TResult>.Execute method will return an Int32 value instead of void and you do not need to set a return value.

public sealed class Divide : CodeActivity
{
    [RequiredArgument]
    public InArgument<int> Dividend { get; set; }

    [RequiredArgument]
    public InArgument<int> Divisor { get; set; }

    public OutArgument<int> Remainder { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        int quotient = Dividend.Get(context) / Divisor.Get(context);
        int remainder = Dividend.Get(context) % Divisor.Get(context);

        Result.Set(context, quotient);
        Remainder.Set(context, remainder);
    }
}

The following code sample demonstrates creating an OutArgument<T>. This example is from the Formatter sample.

Sequence workflow = new Sequence
{
    Variables = { mealExpense, result },
    Activities =
        {
            new Assign<Expense>
            {
               Value = new InArgument<Expense>( (e) => new Meal { Amount = 50, Location = "Redmond", Vendor = "KFC" }),
               To = new OutArgument<Expense>(mealExpense)
            },
            new WriteLine 
            {
                Text = new InArgument<string>("Hello")
            },
            approveExpense,
            new ReceiveReply
            {
                Request = approveExpense,                            
                Content = ReceiveContent.Create(new OutArgument<bool>(result))
            },

            new If
            {
               Condition = new InArgument<bool> (result),
               Then =                         
                    new WriteLine
                    {
                        Text = new InArgument<string>("Expense Approved")
                    },
               Else =                         
                    new WriteLine
                    {
                        Text = new InArgument<string>("Expense Cannot be Approved")
                    },
            },

        }
};

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Supported in: 4

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Show:
© 2014 Microsoft