显式转换
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 上运行?缺少的演员表是什么?
没有隐式转换,所以 .Net 不知道如何使用简单赋值进行转换。
有关隐式与显式转换的详细信息,请参阅此question;
但是,错误指出存在显式转换,因此您需要在代码中添加显式转换。
MailItem mailItem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);
我强烈怀疑不同之处在于 Office 库的导入方式。如果您查看 Visual Studio 项目中引用的属性,我怀疑它会显示 "Embed Interop Types" 属性 设置为 True。这不仅嵌入了互操作类型,而且还生成了 return object
return dynamic
的方法和属性 - 这就是代码可以编译的原因。
我不知道 BluePrism 是否有这样的 COM 库选项。如果没有,只需显式转换为 MailItem
.
考虑以下代码:
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 上运行?缺少的演员表是什么?
没有隐式转换,所以 .Net 不知道如何使用简单赋值进行转换。
有关隐式与显式转换的详细信息,请参阅此question;
但是,错误指出存在显式转换,因此您需要在代码中添加显式转换。
MailItem mailItem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);
我强烈怀疑不同之处在于 Office 库的导入方式。如果您查看 Visual Studio 项目中引用的属性,我怀疑它会显示 "Embed Interop Types" 属性 设置为 True。这不仅嵌入了互操作类型,而且还生成了 return object
return dynamic
的方法和属性 - 这就是代码可以编译的原因。
我不知道 BluePrism 是否有这样的 COM 库选项。如果没有,只需显式转换为 MailItem
.