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是工作流基础的一部分。