我在.NET 4.0中使用Windows Workflow Foundation。下面是我的一些语法/语义混淆。
我有2种等效的方式来声明一个Assign活动,为工作流变量(varIsFreeShipping)赋值。
(1)在设计师中使用XAML。
(2)使用代码。
但是在方法2中,似乎我正在创建一个 new OutArgument<布尔值>并为其赋值,而不是原始变量<布尔> varIsFreeShipping。 OutArgument和Variable是完全不同的类型。
那么分配给这个新参数的值最终如何才能达到原始变量?
这种模式在WF 4.0中很常见。有人可以对此有所了解吗?
谢谢!
答案 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参数)。
这回答了你的问题?