Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# WF4RC,WriteLine活动在分配给TextWriter的StringWriter上引发错误_C#_.net_Workflow Foundation 4 - Fatal编程技术网

C# WF4RC,WriteLine活动在分配给TextWriter的StringWriter上引发错误

C# WF4RC,WriteLine活动在分配给TextWriter的StringWriter上引发错误,c#,.net,workflow-foundation-4,C#,.net,Workflow Foundation 4,我是Windows工作流[WF]的新手,对出于业务目的评估WF感兴趣。我决定通过一个 遇到 测试方法SomeTests.SomeTests.TestMethod引发异常: System.Activities.InvalidWorkflowException:处理工作流树时遇到以下错误: “Literal”:Literal仅支持值类型和不可变类型System.String。类型System.IO.TextWriter不能用作文本 翻开眼睛,我发现上面描述的似乎是我看到的错误 作为WF的新成员,我并

我是Windows工作流[WF]的新手,对出于业务目的评估WF感兴趣。我决定通过一个

遇到

测试方法SomeTests.SomeTests.TestMethod引发异常: System.Activities.InvalidWorkflowException:处理工作流树时遇到以下错误: “Literal”:Literal仅支持值类型和不可变类型System.String。类型System.IO.TextWriter不能用作文本

翻开眼睛,我发现上面描述的似乎是我看到的错误

作为WF的新成员,我并不真正理解改变或规定的解决方法。所以我的问题是,


使用WF4RC,如何[正确]使用
WriteLine
活动?

Ack,k,注意:尝试谷歌搜索的所有排列。搜索后发现

写入线活动WF RC

解决方案是将其包装在一个
LambdaValue
,comme ca中

[TestMethod]
public void TestMethod ()
{
    StringWriter writer = new StringWriter ();
    Sequence sequence = new Sequence
    {
        Activities =
        {
            new WriteLine 
            {
                Text = "Hello", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            },
            new WriteLine 
            {
                Text = "World", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            }
        }
    };
    WorkflowInvoker.Invoke (sequence);
    Assert.
        AreEqual (
        "Hello\r\nWorld\r\n", 
        writer.GetStringBuilder ().ToString ());
}
[TestMethod]
公共void测试方法()
{
StringWriter=新的StringWriter();
序列=新序列
{
活动=
{
新书写线
{
Text=“你好”,
TextWriter=新的LambdaValue(n=>writer)
},
新书写线
{
Text=“世界”,
TextWriter=新的LambdaValue(n=>writer)
}
}
};
WorkflowInvoker.Invoke(序列);
断言。
平等的(
“你好\r\nWorld\r\n”,
writer.GetStringBuilder().ToString();
}
这对我来说似乎很奇怪,但我实际上是“专家”的反面:p


如果有人有其他选择,我还是欢迎的。

也只是停留在它上面。。。这是我的拙见

TextWriter与该活动的任何其他元素(如文本元素)一样,都是一个不活跃的参与者。InArgument是在工作流的上下文中计算的(因此使用ActivityContext来收集此工作流中的实际值)

当您直接指定writer时,它会自动转换为后面带有文字表达式的inagrament。文字或多或少是工作流中不变的部分,因此不允许更改。异常告诉您避免使用状态将更改的类型

使用LambdaValue expression活动可以在工作流的每个实例化中指定一个(新)编写器。工作流希望此对象在工作流结束之前具有临时性质


我希望这能澄清这个问题,我没有让自己成为一个孤僻的人。

我在尝试设置字符串[]时也遇到过类似的问题。LambdaValue起作用了。但我也注意到,如果你使用InArgument,它也会起作用,而且可能是应该采用的方式。
[TestMethod]
public void TestMethod ()
{
    StringWriter writer = new StringWriter ();
    Sequence sequence = new Sequence
    {
        Activities =
        {
            new WriteLine 
            {
                Text = "Hello", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            },
            new WriteLine 
            {
                Text = "World", 
                TextWriter = new LambdaValue<TextWriter> (n => writer) 
            }
        }
    };
    WorkflowInvoker.Invoke (sequence);
    Assert.
        AreEqual (
        "Hello\r\nWorld\r\n", 
        writer.GetStringBuilder ().ToString ());
}