5

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

我有两种等效的方式来声明分配活动以将值分配给工作流变量(varIsFreeShipping)。

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

在此处输入图像描述

(2) 使用代码。

在此处输入图像描述

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

那么分配给这个新 Argument 的值怎么会最终到达原来的 Variable 呢?

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

谢谢!

4

1 回答 1

4

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

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

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

在您的第一个 (1) 分配中,使用编辑器,这就是幕后发生的事情;变量正在从变量隐式转换为 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;
}

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

这回答了你的问题?

于 2013-09-18T10:43:21.303 回答