【问题标题】:Is it possible to use Linq to replace this Foreach loop是否可以使用 Linq 来替换这个 Foreach 循环
【发布时间】:2013-09-30 12:06:59
【问题描述】:

是否可以用 Linq 命令替换 foreach 语句?

            string recipient = "recipients could not be defined"; 
            if (mail.To != null && mail.To.Count > 0) {
                var addresses = mail.To.Select(r => r.Address);
                foreach (string s in addresses) {
                    recipient += s + " ";
                }
            }

如果我有 ReSharper,那么我确信它会提出适当的建议,但我没有。 This question uses Concat 感觉应该有所帮助,但我不确定在 Concat 中使用什么对象。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    与其使用 Linq foreach(除非您自己编写,否则仅在 List<T> 上可用),您可以向后执行并避免过程中的字符串连接:

    recipient = string.Join(" ", mail.To.Select(r => r.Address));
    

    这将替换您的 var addresses... 以后。

    【讨论】:

    • 打败我。 :) 请注意,这(可能)还修复了原始代码中的一个错误,这将导致recipient 有一个尾随空格,我猜这并不是真正想要的。
    • 真的!我记得我在此之前编写的代码要么在最后进行修剪,要么手动修剪我在循环中使用的 StringBuilder 中的最后一个字符
    • 如果您使用它,请记住您需要mail.To != null 条件,而不是mail.To.Count > 0。
    • 这就是票。谢谢你。 @马修·沃森。我只是在收集信息,所以不太担心额外的尾随空格,但这种方式也可以解决这个问题。
    • 使用..&& mail.To.Any()而不是Count()
    猜你喜欢
    • 2011-07-16
    • 2020-11-24
    • 2013-07-08
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多