假设我创建了一个简单的工作流,其中包含两个变量result
typeBoolean
和myInt
type Integer
。现在添加一个活动“分配”,放置result
在结果框中,并Integer.TryParse("22", myInt)
在右手表达式中。运行此活动后,变量仍然具有值0
。
为什么TryParse
调用的结果没有正确存储在变量中?(这里也不会产生错误)
假设我创建了一个简单的工作流,其中包含两个变量result
typeBoolean
和myInt
type Integer
。现在添加一个活动“分配”,放置result
在结果框中,并Integer.TryParse("22", myInt)
在右手表达式中。运行此活动后,变量仍然具有值0
。
为什么TryParse
调用的结果没有正确存储在变量中?(这里也不会产生错误)
WF 不是这样工作的。变量没有输入/输出的概念作为参数。它们没有实现隐式运算符,因此结果永远不会按您的意愿存储。
您可以实现自己的 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")
}
}
};
如果您查看 obj/x86/Debug 或项目中的临时文件所在的位置,您会发现一些可以满足您好奇心的中间 .cs 文件。我试过了,你得到了一个带有私有 int myInt 和私有 bool 结果的类以及一个使用这些变量的 tryparse 语句。因此没有爆炸,尽管我确实在输出窗口中看到了一些问题!