Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett WF-uttryck (Windows Workflow Foundation) är alla aktiviteter som returnerar ett resultat. Alla uttrycksaktiviteter härleds indirekt från Activity<TResult>, som innehåller en OutArgument egenskap med namnet Result som aktivitetens returvärde. WF levereras med ett brett utbud av uttrycksaktiviteter från enkla som VariableValue<T> och VariableReference<T>, som ger åtkomst till enstaka arbetsflödesvariabel genom operatörsaktiviteter, till komplexa aktiviteter som VisualBasicReference<TResult> och VisualBasicValue<TResult> som ger åtkomst till hela bredden av Visual Basic-språket för att producera resultatet. Ytterligare uttrycksaktiviteter kan skapas genom att härleda från CodeActivity<TResult> eller NativeActivity<TResult>.
Använda uttryck
Arbetsflödesdesignern använder VisualBasicValue<TResult> och VisualBasicReference<TResult> för alla uttryck i Visual Basic-projekt och CSharpValue<TResult>CSharpReference<TResult> för uttryck i C#-arbetsflödesprojekt.
Anmärkning
Stöd för C#-uttryck i arbetsflödesprojekt introducerades i .NET Framework 4.5. Mer information finns i C#-uttryck.
Arbetsflöden som skapas av designer sparas i XAML, där uttryck visas inom hakparenteser, som i följande exempel.
<Sequence xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<Variable x:TypeArguments="x:Int32" Default="1" Name="a" />
<Variable x:TypeArguments="x:Int32" Default="2" Name="b" />
<Variable x:TypeArguments="x:Int32" Default="3" Name="c" />
<Variable x:TypeArguments="x:Int32" Default="0" Name="r" />
</Sequence.Variables>
<Assign>
<Assign.To>
<OutArgument x:TypeArguments="x:Int32">[r]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:Int32">[a + b + c]</InArgument>
</Assign.Value>
</Assign>
</Sequence>
När du definierar ett arbetsflöde i kod kan alla uttrycksaktiviteter användas. I följande exempel visas användningen av en sammansättning av operatoraktiviteter för att lägga till tre tal:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int> {
Expression = new Add<int, int, int> {
Left = new Add<int, int, int> {
Left = new InArgument<int>(a),
Right = new InArgument<int>(b)
},
Right = new InArgument<int>(c)
}
}
}
}
};
Samma arbetsflöde kan uttryckas mer kompakt med hjälp av C#-lambda-uttryck, som du ser i följande exempel:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int>((ctx) => a.Get(ctx) + b.Get(ctx) + c.Get(ctx))
}
}
};
Utöka tillgängliga uttryck med anpassade uttrycksaktiviteter
Uttryck i .NET Framework 4.6.1 är utökningsbara så att ytterligare uttrycksaktiviteter kan skapas. I följande exempel visas en aktivitet som returnerar en summa av tre heltalsvärden.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
namespace ExpressionsDemo
{
public sealed class AddThreeValues : CodeActivity<int>
{
public InArgument<int> Value1 { get; set; }
public InArgument<int> Value2 { get; set; }
public InArgument<int> Value3 { get; set; }
protected override int Execute(CodeActivityContext context)
{
return Value1.Get(context) +
Value2.Get(context) +
Value3.Get(context);
}
}
}
Med den här nya aktiviteten kan du skriva om det tidigare arbetsflödet som lade till tre värden enligt följande exempel:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int> {
Expression = new AddThreeValues() {
Value1 = new InArgument<int>(a),
Value2 = new InArgument<int>(b),
Value3 = new InArgument<int>(c)
}
}
}
}
};
Mer information om hur du använder uttryck i kod finns i Redigera arbetsflöden, aktiviteter och uttryck med imperativ kod.