在Windows Workflow Foundation中使用ByRef变量?

时间:2012-09-26 12:26:01

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

假设我创建了一个包含两个变量的简单工作流,result类型BooleanmyInt类型Integer。现在添加一个活动“分配”,将result放在结果框中,并在右侧表达式中放置Integer.TryParse("22", myInt)。 运行此活动后,变量仍具有值0

为什么TryParse调用的结果未正确存储在变量中? (这里也没有产生错误)

2 个答案:

答案 0 :(得分:2)

这不是WF的工作方式。变量没有in / out作为参数的概念。它们不实现隐式运算符,因此结果永远不会按您的意愿存储。

您要么实施自己的TryParse活动,要么可以像这样使用InvokeMethod

var resultVar = new Variable<bool>("result");
var myIntVar = new Variable<int>("myInt");

var activity = new Sequence
{
    Variables = 
    {
        resultVar,
        myIntVar
    },
    Activities =
    {
        new InvokeMethod
        {
            TargetType = typeof(int),
            MethodName = "TryParse",
            Result = new OutArgument<bool>(resultVar),
            Parameters = 
            {
                new InArgument<string>("22"),
                new OutArgument<int>(myIntVar)
            }
        },
        new WriteLine
        {
            Text = new VisualBasicValue<string>(@"""INT: "" & myInt")
        }
    }
};

答案 1 :(得分:1)

如果您查看obj / x86 / Debug或项目中临时文件的位置,您会发现一些可以满足您好奇心的中间.cs文件。我尝试了这个,你得到一个带有私有int myInt和私有bool结果的类以及使用这些变量的tryparse语句。因此没有爆炸,虽然我确实在输出窗口中看到了一些问题!