C# 在Redemption中调用RDORecipients.AddMultiple(引用数组,对象)时发生异常

C# 在Redemption中调用RDORecipients.AddMultiple(引用数组,对象)时发生异常,c#,outlook-redemption,C#,Outlook Redemption,我正在尝试使用RDORecipients.AddMultiple函数向邮件中添加大量收件人 RDOSession session = new RDOSession(); RDOMail mail = session.CreateMsgFromMsgFile("test.msg", "IPM.Note"); List<string> recipientsList = {"test1@test.com", "test2@test.com"}; Array recipients = rec

我正在尝试使用RDORecipients.AddMultiple函数向邮件中添加大量收件人

RDOSession session = new RDOSession();
RDOMail mail = session.CreateMsgFromMsgFile("test.msg", "IPM.Note");
List<string> recipientsList = {"test1@test.com", "test2@test.com"};
Array recipients = recipientsList.ToArray();
rdoMail.Recipients.AddMultiple(ref recipients, 1);
RDOSession session=newrdosession();
RDOMail mail=session.CreateMsgFromMsgFile(“test.msg”、“IPM.Note”);
列表接收者列表={”test1@test.com", "test2@test.com"};
数组收件人=recipientsList.ToArray();
rdoMail.Recipients.AddMultiple(ref Recipients,1);

正在最后一行引发异常SafeArrayTypeMismatchException(指定的数组不是预期的类型)。我尝试用new和array.CreateInstance(typeof(string),元素数)以不同的方式创建数组。我觉得我需要在托管代码和非托管代码之间做些什么,但我不确定如何做。这可能是因为文档/pinvoke签名不正确,但不太可能是这样。

尝试将recipients变量声明为string[]

尝试将recipients变量声明为字符串[]

我注意到收件人的签名。Add(object)方法接受对象而不是字符串。在强制转换到System.Array之前,我尝试将其声明为对象[]而不是字符串[],但成功了。

我注意到收件人的签名。Add(object)方法接受对象而不是字符串。在强制转换到System.Array之前,我尝试将其声明为object[]而不是string[],结果成功了。

我发现解决方案是:

RDOSession session = new RDOSession();
RDOMail mail = session.CreateMessageFromMsgFile("test.msg", "IPM.Note");
List<string> recipientsList = new List<string>{ "test1@test.com", "test2@test.com" };
Array recipients = recipientsList.ToArray<object>();
mail.Recipients.AddMultiple(ref recipients, 1);
RDOSession session=newrdosession();
RDOMail mail=session.CreateMessageFromMsgFile(“test.msg”、“IPM.Note”);
列表接收者列表=新列表{”test1@test.com", "test2@test.com" };
数组收件人=recipientsList.ToArray();
mail.Recipients.AddMultiple(ref Recipients,1);

数组必须使用对象类型,并且不存在null元素,否则它将在AddMultiple()中引发异常。

我发现解决方案是:

RDOSession session = new RDOSession();
RDOMail mail = session.CreateMessageFromMsgFile("test.msg", "IPM.Note");
List<string> recipientsList = new List<string>{ "test1@test.com", "test2@test.com" };
Array recipients = recipientsList.ToArray<object>();
mail.Recipients.AddMultiple(ref recipients, 1);
RDOSession session=newrdosession();
RDOMail mail=session.CreateMessageFromMsgFile(“test.msg”、“IPM.Note”);
列表接收者列表=新列表{”test1@test.com", "test2@test.com" };
数组收件人=recipientsList.ToArray();
mail.Recipients.AddMultiple(ref Recipients,1);

数组必须使用对象类型,并且不存在null元素,否则它将在AddMultiple()中引发异常。

。代码将不会编译(最佳重载方法匹配有一些无效参数)。将字符串[]强制转换为System.Array会导致原始问题中的相同异常。将值复制到对象数组(object[])如何?我有。代码将不会编译(最佳重载方法匹配有一些无效参数)。将字符串[]强制转换为System.Array会导致原始问题中的相同异常。将值复制到对象数组(对象[])如何?