【问题标题】:Looping over a string - Is there a better way?循环字符串 - 有没有更好的方法?
【发布时间】:2018-02-08 09:52:22
【问题描述】:

我使用下面的代码将一个字符串数组传递给一个函数。数组中的字符串是电子邮件地址的第一部分。我需要将 domain.com 添加到每个字符串的末尾,并在每个地址之间添加一个“,”。我在下面有工作代码,但只是想知道是否有(更好/更清洁/高效)的方式来做到这一点?

String toAddress = "";
for (int x = 0; x < addresses.Length; x++)
{
    if (x == (addresses.Length-1))
    {
        toAddress += addresses[x] + "@domain.com";
    }
    else
    {
        toAddress += addresses[x] + "@domain.com,";
    }
}

【问题讨论】:

  • x 是一个非常糟糕的变量名。

标签: c# for-loop coding-style


【解决方案1】:

你可以使用 Join 和 Linq Select 来解决这个问题

string toAddress = string.Join(",", addresses.Select(x => x + "@domain.com"));

【讨论】:

  • (回答 OP 问题评论,似乎已被删除):x 是 lambda 表达式中的一个参数,它实际上是说对每个元素执行此操作(在这种情况下附加“@domain .com”。见docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
  • Select 用于遍历数组中的每个项目。 x 表示单个元素(在您的情况下为addresses[x])。 + 用于将地址与“domain.com”连接起来。 "," 作为第一个参数用作分隔符。
  • @d219 感谢您的评论和链接,我将阅读它。
  • @Prasadtelkikar 谢谢,现在说得通了。
【解决方案2】:

fubo 有最理想和最简洁的答案,但这里也有另一种方法。

string toAddress = null;
addresses.ForEach(x => toAddress += $"{x}@domain.com,");
toAddress = toAddress.Remove(toAddress.Length - 1);

【讨论】:

  • 如果 Fubo 有最理想和最简洁的答案(我同意,因为我打算发布我自己的但它不是那么好),那么添加上述内容有什么意义?
  • @d219 都是关于替代方法的,请不要阻止新的回答者。
  • 额外的 Linq / C#6 教育?
  • @m.rogalski - 也许我应该发布这个,我认为它可能被否决了:string toAddress = $"{string.Join("@domain.com,",addresses)} @domain.com";
  • @d219 你仍然可以发布另一种选择,所以就是建立一个知识库,在这个知识库上每个有效的解决方案都受到重视。
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多