繁体   English   中英

显式转换

[英]Explicit Conversion

考虑以下代码:

using Microsoft.Office.Interop.Outlook;
using OutlookApp = Microsoft.Office.Interop.Outlook.Application;

namespace OutlookInterop
{
    class Program
    {
        static void Main(string[] args)
        {
            OutlookApp outlookApp = new OutlookApp();
            MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem);
            mailItem.To = "test@test.com";
            mailItem.Subject = "Test Email Alert";
            mailItem.HTMLBody = "<html><body>Test email body.</body></html>";
            mailItem.Display(false);
        }
    }
}  

当我在Visual Studio上运行该代码时,它运行良好,但是在BluePrism中使用它时,出现以下编译器错误:

Page: Send Email Alert c#
Stage: Code1
Type: Error
Action: Validate
Description: Compiler error at line 2: Cannot implicitly convert type 'object' to 'Microsoft.Office.Interop.Outlook.MailItem'. An explicit conversion exists (are you missing a cast?)
Repairable: No

我想我已经在BluePrism中引用了正确的程序集,即:
在此处输入图片说明

这是实际代码阶段中的代码:

    OutlookApp outlookApp = new OutlookApp();
    MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); //this would be line 2
    mailItem.To = "test@test.com";
    mailItem.Subject = "Test Email Alert";
    mailItem.HTMLBody = "<html><body>Test email body.</body></html>";
    mailItem.Display(false);

那么,为什么该代码在Visual Studio上却不能在BluePrism中起作用? 缺少的演员表是什么?

我强烈怀疑这种差异在于Office库的导入方式。 如果您查看Visual Studio项目中引用的属性,我怀疑它会显示“嵌入互操作类型”属性设置为True。 这不仅嵌入了互操作类型,而且使将返回object方法和属性改为dynamic返回-这就是代码将被编译的原因。

我不知道BluePrism是否有类似COM库的选项。 如果不是,则将其显式转换为MailItem

没有隐式转换,因此.Net不知道如何使用简单赋值进行转换。

有关隐式转换与显式转换的详细信息,请参见此问题

但是,错误指出存在显式转换,因此您需要向代码中添加显式强制转换。

MailItem mailItem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM