使用 LINQ/lambdas 构建以逗号分隔的内部异常消息字符串 [重复]

Posted

技术标签:

【中文标题】使用 LINQ/lambdas 构建以逗号分隔的内部异常消息字符串 [重复]【英文标题】:Build a comma-separated string of inner-exception messages, using LINQ/lambdas [duplicate] 【发布时间】:2016-02-11 05:57:43 【问题描述】:

SmtpFailedRecipientsException.InnerExceptionsSmtpFailedRecipientException 的数组。我想构建一个看起来像这样的字符串:

“以下收件人失败:[joe@domain1.com, 史蒂夫@domain2.com]。电子邮件已发送给所有其他收件人 成功”

SmtpFailedRecipientException.FailedRecipient 保存电子邮件地址。

我正在尝试确定是否有一种方法可以使用 LINQ 和/或 lambda 函数在此数组上有效地执行 join,也许通过阅读 SmtpFailedRecipientException.Message 或类似的东西将其转换为 string[]行,而不是编写 C 风格的 for 循环?

这个问题 (Getting all messages from InnerException(s)?) 解决了分层嵌套异常的更一般情况,但这 不是 我所追求的......那里的答案比我需要的要复杂得多(正如这里的答案所示)。

【问题讨论】:

类似string.Join(", ", ex.InnerExceptions.Select(e => e.Message))?或者您的InnerExceptions 可以自己拥有InnerExceptions 吗?你试过搜索吗? 进一步的嵌套级别并不太重要...尽管将 anything 转换为 string[] 的通用方法可以让我在需要时解决更复杂的场景。跨度> 我看不出链接的问题是如何重复的。我追求的是对更简单场景的更简单答案,而不是一般情况。这里给出的答案与那个问题中的答案明显不同...... 我认为我同意 CodeCaster 的观点,因为这个问题没有做任何复杂的事情。分为三个阶段,从对象列表中提取字符串到字符串列表中,连接这些字符串,将该字符串放入消息中。目前尚不清楚您遇到了哪些问题(我最初的假设是您不知道如何获取电子邮件地址,但这似乎是错误的)。我怀疑这三个部分中的每一个都在网站上的某个地方得到了回答,实际上并不是很清楚你遇到了哪一个问题...... @Mr.Boy:我无法评论您提出的任何其他问题,而且由于我对 linq 非常熟悉,因此我很难退后一步询问您是否处于合适的位置将其分为我上面概述的三个步骤,以便能够说出您遇到的问题。话虽如此,我为“对象列表的连接属性”做了一个谷歌搜索,最热门的是***.com/questions/5822716/…,这似乎回答了你的问题。 【参考方案1】:
string[] exceptionMessages = yourSmtpFailedRecipientsException.InnerExceptions
    .Select(ex => ex.Message)
    .ToArray();

如果你想用逗号分隔你可以使用String.Join:

Console.Write(String.Join(",", exceptionMessages));

【讨论】:

ex.FailedRecipient 实际上是我感兴趣的属性,虽然这是一个小细节,但从您的回答中可以清楚地看到方法。【参考方案2】:

您感兴趣的属性是SmtpFailedRecipientException.FailedRecipient 属性,根据文档“指示有递送困难的电子邮件地址”。

要获取失败地址的列表,您可以这样做:

IEnumerable<string> emailAddresses = SmtpFailedRecipientsException.InnerExceptions.Select(x=>x.FailedRecipient);
string joinedAddresses = String.Join(", ", emailAddresses);
string message = String.Format("The following recipients failed: [0]. The email was sent to all other recipients succesfully", joinedAddresses );

这使用了一些您可以根据需要跳过的局部变量,我使用它们主要是为了便于阅读并清楚地说明我在做什么。

【讨论】:

以上是关于使用 LINQ/lambdas 构建以逗号分隔的内部异常消息字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

以逗号分隔的字符串查找目录列表,不带尾随逗号

EF linq/lambdas 使用 concat 连接 2 个表

如何从 SQL CE 中的表中构建逗号分隔列表?

基于逗号分隔的字符串 -oracle 构建数组

熊猫合并列以使用逗号分隔值创建新列

使用 oracle sql 以逗号分隔的字符串