假设我创建了一个包含两个变量的简单工作流,result
类型Boolean
和myInt
类型Integer
。现在添加一个活动“分配”,将result
放在结果框中,并在右侧表达式中放置Integer.TryParse("22", myInt)
。
运行此活动后,变量仍具有值0
。
为什么TryParse
调用的结果未正确存储在变量中?
(这里也没有产生错误)
答案 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语句。因此没有爆炸,虽然我确实在输出窗口中看到了一些问题!