关于.NET 4.0 Workflow Foundation中的Argument <T>和Variable <T>的困惑

smw*_*dia 5 .net-4.0 workflow-foundation workflow-foundation-4

我在.NET 4.0中使用Windows Workflow Foundation.下面是我的一些语法/语义混淆.

我有2种等效的方式来声明一个Assign活动来为工作流变量赋值(varIsFreeShipping).

(1)在设计器中使用XAML.

在此输入图像描述

(2)使用代码.

在此输入图像描述

但是在方法2中,似乎我正在创建一个新的 OutArgument <Boolean>并为其赋值,而不是原始的 Variable <Boolean> varIsFreeShipping.OutArgument和Variable是完全不同的类型.

那么分配给这个新参数的值最终如何才能达到原始变量?

这种模式在WF 4.0中似乎很常见.有人可以对此有所了解吗?

谢谢!

Joa*_*oao 4

事实上,第二种(2)方法可以写成:

Then = new Assign<bool>
{
    To = varIsFreeShipping,
    Value = true
}
Run Code Online (Sandbox Code Playgroud)

这一切都有效,因为OutArgument<T>可以使用隐式运算符通过Variable<T>进行初始化。

在您的第一个 (1) 作业中,使用编辑器,这就是幕后发生的事情;该变量正在从 Variable隐式转换为 OutArgument。

WF4 使用了很多隐式运算符,主要是 Activity<T> from/to Variable<T>、OutArgument<T> from/to Variable<T> 等。如果你看一下,它们都代表一条数据(已经计算过)或不是),它位于某个地方。它与 C# 中的完全相同,例如:

public int SomeMethod(int a)
{
    var b = a;
    return a;
}
Run Code Online (Sandbox Code Playgroud)

您可以将参数分配给变量,但也可以将同一变量作为输出参数返回。这就是您对Assign<T> 活动所做的事情(使用变量varIsFreeShipping作为活动的out 参数)。

这回答了你的问题吗?