.net 在Windows工作流基础中使用BYREF变量?

.net 在Windows工作流基础中使用BYREF变量?,.net,workflow-foundation-4,workflow-foundation,.net,Workflow Foundation 4,Workflow Foundation,假设我创建了一个包含两个变量的简单工作流,result类型为Boolean和myInt类型为Integer。现在添加一个活动“Assign”,将result放在结果框中,将Integer.TryParse(“22”,myInt)放在右侧表达式中。 运行此活动后,变量仍具有值0 为什么TryParse调用的结果未正确存储在变量中? (此处也没有生成错误)WF不是这样工作的。变量没有in/out作为参数的概念。它们不实现隐式运算符,因此结果永远不会按您的意愿存储 您可以实施自己的TryParse活动

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

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

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

您可以实施自己的TryParse活动,也可以这样使用:

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")
        }
    }
};
var resultVar=新变量(“结果”);
var myIntVar=新变量(“myInt”);
var活动=新序列
{
变量=
{
结果,
密特瓦尔
},
活动=
{
新方法
{
TargetType=typeof(int),
MethodName=“TryParse”,
结果=新的输出参数(resultVar),
参数=
{
新的不确定性(“22”),
新输出参数(myIntVar)
}
},
新书写线
{
Text=新的VisualBasicValue(@“INT:&myInt”)
}
}
};

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

好的,但是为什么在这条线的某个地方没有生成错误呢?某种类型的隐式转换必须在某个地方发生?@decf:不会生成错误,因为它是按照您的配置工作的。它试图解析它,它工作了,并返回一个值true。您传入的整数已被复制,副本实际上已在其作用域中成功更改,但由于您没有以任何方式将该值传回,因此从中复制的值(变量)将永远不会更改。