【问题标题】:WF C# VS2012 - InvalidCast Exception was unhandled by user code?WF C# VS2012 - 用户代码未处理 InvalidCast 异常?
【发布时间】:2013-09-07 16:21:24
【问题描述】:

我正在尝试 Windows Workflow 书中的示例,但出现错误:

用户代码未处理 InvalidCast 异常

无法将“System.DBNull”类型的对象转换为“System.String”类型。

导致错误的确切代码是:

 try
        {
            // Send data to workflow!
            IDictionary<string, object> outputArgs =
            WorkflowInvoker.Invoke(new CheckInventory(), wfArgs);

            // Print out the output message.
            Console.WriteLine(outputArgs["FormattedResponse"]);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

程序将运行,从用户那里得到两个问题:汽车的颜色和品牌,然后它会抛出这个错误。有任何想法吗 ?

【问题讨论】:

    标签: c# visual-studio-2012 workflow-foundation


    【解决方案1】:

    我猜是线路的问题

    Console.WriteLine(outputArgs["FormattedResponse"]);
    

    您似乎正在尝试将 outputArgs["FormattedResponse"] 转换为字符串(以便将其写入控制台),但它的计算结果为 DBNull(即,输出 args 中没有这样的输出消息)。因此,在打印之前检查 outputArgs["FormattedResponse"] != DBNull.Value 是否:

        var outputResponse = outputArgs["FormattedResponse"];
        if(outputResponse != DBNull.Value) 
            Console.WriteLine(outputResponse);
    

    【讨论】:

    • 不,它的突出显示:WorkflowInvoker.Invoke(new CheckInventory(), wfArgs);
    • 突出显示 WorkflowInvoker.Invoke(new CheckInventory(), wfArgs); CheckInventory 部分被进一步突出
    • 在这种情况下,虽然我不确定这是否是同一个问题,但它看起来像 known bug。您可以尝试所描述的替代解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2018-10-25
    • 2019-04-11
    相关资源
    最近更新 更多