Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WF 4中的模型项_C#_Visual Studio 2010_Workflow Foundation_Workflow Foundation 4 - Fatal编程技术网

C# WF 4中的模型项

C# WF 4中的模型项,c#,visual-studio-2010,workflow-foundation,workflow-foundation-4,C#,Visual Studio 2010,Workflow Foundation,Workflow Foundation 4,我在WF4.0项目中工作。这是我自己定制活动的一部分: public Activity Create(DependencyObject target) { var sequenceModelItem = (target as WorkflowViewElement).ModelItem; sequenceModelItem .Properties["Variables"] .Collection

我在WF4.0项目中工作。这是我自己定制活动的一部分:

public Activity Create(DependencyObject target)
{
        var sequenceModelItem = (target as WorkflowViewElement).ModelItem;
        sequenceModelItem
            .Properties["Variables"]
            .Collection
            .Add(new Variable<List<string>>("Provider", provider));

        sequenceModelItem
            .Properties["Variables"]
            .Collection
            .Add(new Variable<string>("ProviderSearch"));

        return new Sequence
        {
            Activities =
        {
           // Some activities...
        } 
        };
    }
公共活动创建(DependencyObject目标) { var sequenceModelItem=(目标为WorkflowViewElement); sequenceModelItem .Properties[“变量”] 收集 .添加(新变量(“提供者”,提供者)); sequenceModelItem .Properties[“变量”] 收集 .Add(新变量(“ProviderSearch”); 返回新序列 { 活动= { //一些活动。。。 } }; } 这就是问题所在。在provider中,我在数据库中有一些提供程序的列表。在SequenceModelItem中,我创建了一个具有相同类型的变量,并将列表提供程序关联到该变量。一切都是正确的,但当我部署工作流并执行时,出现以下错误:

*处理工作流树时遇到以下错误:“文字”:文字仅支持值类型和不可变类型System.String。类型System.Collections.Generic.List`1[System.String]不能用作文本*

请确保错误在此处:

    .Add(new Variable<List<string>>("Provider", provider));
.Add(新变量(“Provider”,Provider));
但我不知道该怎么解决它


谢谢

您是否需要将该行更改为:

.Add(new Variable<Dictionary<string, object>>( { "Provider", provider }));
.Add(新变量({“Provider”,Provider}));

根据Ron Jacobs的研究,新变量似乎正在尝试将列表转换为文本,而对于引用类型(List),该文本将失败。文章指出,如果要使用引用类型,必须使用字典。

可以使用lambda进行实例化

new Variable<List<string>>("Provider", context => provider)
new变量(“Provider”,context=>Provider)

但我不确定这是否是您希望在活动模板工厂的Create方法中执行的操作。此方法将在设计时从设计器中调用,但提供者肯定是一个运行时问题。您不应该在运行时使用一些东西去获取提供者吗?

对于将来的引用,
我尝试将查询结果保存在构造函数的活动方法的列表中。稍后,在create方法中,我创建了一个与Provider名称相同的类型(List)变量,并复制Provider中以前的List Provider。您的活动实际上看起来像一个活动模板。在活动模板中,只能提供工作流部分的结构,而不能提供实际代码。为此,您需要实现一个CodeActivity/AsyncCodeActivity/NativeActivity,它将从数据库中获取字符串列表。我可以在同一个类中执行SimpleActivity:NativeActivity,IActivityTemplateFactory吗?Hi ShelbyZ。当我这样做时,会出现执行时间错误。处理表达式“(集合)”时遇到编译器错误。'未声明集合的ins。由于其保护级别,可能无法访问