ExpressionServices Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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. |