关于论证的困惑< T>和变量< T>在.NET 4.0 Workflow Foundation中

时间:2013-09-16 07:51:02

标签: .net-4.0 workflow-foundation-4 workflow-foundation

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

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

(1)在设计师中使用XAML。

enter image description here

(2)使用代码。

enter image description here

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:4)

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

Then = new Assign<bool>
{
    To = varIsFreeShipping,
    Value = true
}

这一切都有效,因为OutArgument<T>可以使用 Variable<T> 通过implicit operator进行初始化。

在你的第一个(1)分配中,使用编辑器,这就是场景背后发生的事情;该变量正在隐式从Variable转换为OutArgument。

WF4主要在Activity&lt; T&gt;上使用很多隐式运算符。从/到变量&lt; T&gt;,OutArgument&lt; T&gt;从/到变量&lt; T&gt;等等。如果你看一下它们,它们都代表一个位于某处的数据(已评估或未评估)。它与C#中的完全相同,例如:

public int SomeMethod(int a)
{
    var b = a;
    return a;
}

您可以为变量分配参数,但也可以将该变量作为 out参数返回。那是你正在做的那个分配&lt; T&gt; activity(使用变量 varIsFreeShipping 作为活动的out参数)。

这回答了你的问题?