C# 工作流基金会-活动:有可能提出一个论点吗?
我对活动的外参数有问题。下面是一个简化的代码示例:C# 工作流基金会-活动:有可能提出一个论点吗?,c#,workflow,workflow-foundation,workflow-activity,C#,Workflow,Workflow Foundation,Workflow Activity,我对活动的外参数有问题。下面是一个简化的代码示例: public class Animal { } public class Dog : Animal { } public class CreateNewDogActivity : CodeActivity<Dog> { protected override Dog Execute( CodeActivityContext context )
public class Animal
{
}
public class Dog : Animal
{
}
public class CreateNewDogActivity : CodeActivity<Dog>
{
protected override Dog Execute( CodeActivityContext context )
{
return new Dog();
}
}
public class Program
{
public void Start()
{
Variable<Animal> animal = new Variable<Animal>( "animal" );
var createDogStep = new FlowStep
{
Action = new CreateNewDogActivity()
{
Result = new OutArgument<Dog>( animal )
}
};
var flowChart = new Flowchart()
{
Variables = { animal },
StartNode = createDogStep,
Nodes = {
createDogStep
}
};
WorkflowInvoker.Invoke( flowChart );
}
}
公共类动物
{
}
公营狗:动物
{
}
公共类CreateNewDogActivity:CodeActivity
{
受保护的覆盖狗执行(CodeActivityContext上下文)
{
归还新狗();
}
}
公共课程
{
公开作废开始()
{
可变动物=新变量(“动物”);
var createDogStep=新流程步骤
{
操作=新建CreateNewDogActivity()
{
结果=新输出参数(动物)
}
};
var流程图=新流程图()
{
变量={animal},
StartNode=createDogStep,
节点={
createDogStep
}
};
WorkflowInvoker.Invoke(流程图);
}
}
在运行时,我得到以下错误:
测试方法UnitTests.Base.Mvc.Workflow.OutArgumentTest.OutArgumentProgramTest引发异常:
System.Activities.InvalidWorkflowException:处理工作流树时遇到以下错误:
“VariableReference”:变量“System.Activities”。变量“1[UnitTests.Base.Mvc.Workflow.Animal]”不能在类型为“UnitTests.Base.Mvc.Workflow.Dog”的表达式中使用,因为它的类型为“UnitTests.Base.Mvc.Workflow.Animal”,不兼容
将类型为“Dog”的结果输出参数赋值给类型为“Animal”的变量的最简单方法是什么?
谢谢大家! 声明变量Animal时,其类型设置为Animal类型的变量。然而,当您声明Dog类型的OutArgument时,您向它传递了一个animal。这失败了,因为动物变量与狗变量不兼容,并且仿制药确保了类型安全。要进一步阅读,请查看 解决方法如下所示
FlowStep createDogStep;
var doggy = animal as Variable<Dog>;
if (doggy != null) {
createDogStep = new FlowStep {
Action = new CreateNewDogActivity()
{
Result = new OutArgument<Dog>( doggy )
}
};
FlowStep-createDogStep;
var doggy=动物变量;
if(doggy!=null){
createDogStep=新流程步骤{
操作=新建CreateNewDogActivity()
{
结果=新的输出参数(狗)
}
};
< /代码>新的(动物)(论题(动物)可以提供更多关于争论的上下文?什么是构造函数签名?@ PaultSaI Outlook是工作流基础的一部分。