一行 LINQ 将 string[] 展平为字符串?

发布于 2024-11-09 04:41:22 字数 193 浏览 0 评论 0原文

我想出了下面的 foreach 但我希望这可以在一行中完成..也许 linq ?任何想法将不胜感激。

foreach (string item in decoder.AllKeys)
{
    message += String.Format("{0}: {1} ;", item, decoder[item]);
}

I came up with the foreach below but I am hoping this can be accomplished in one line.. maybe linq? Any ideas would be appreciated.

foreach (string item in decoder.AllKeys)
{
    message += String.Format("{0}: {1} ;", item, decoder[item]);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

Spring初心 2024-11-16 04:41:22
var message = string.Join(
    ";", 
    decoder.AllKeys
           .Select(x => string.Format("{0}: {1} ", x, decoder[item]))
           .ToArray()
);
var message = string.Join(
    ";", 
    decoder.AllKeys
           .Select(x => string.Format("{0}: {1} ", x, decoder[item]))
           .ToArray()
);
深爱不及久伴 2024-11-16 04:41:22

BCL 中的 String 类已经支持这一点。这是使用 String 类实现此目的的一个衬垫。如果 BCL 操作可用的话,我总是会使用 BCL 操作,因为考虑到 MS 人员已经煞费苦心地优化了这样一个关键的类。

String.Join(";", decoder.AllKeys);

以下是此方法所有变体的 MSDN 链接 - http://goo.gl/kmwfYt

The String class from BCL already supports this. Here is a one liner to achieve this using String class. I would always use the BCL operation if it's available there considering the MS guys would have already taken the pain to optimize such a crucial class.

String.Join(";", decoder.AllKeys);

Here is the link to the MSDN for all the variants of this method - http://goo.gl/kmwfYt

滴情不沾 2024-11-16 04:41:22

如果您使用的是 .NET 4.0,则可以使用以下方法:

string message = string.Join(" ;", decoder.AllKeys
    .Select(k => string.Format("{0}: {1}", k, decoder[k]));

如果您尚未使用 .NET 4.0,则需要将集合转换为数组:

string message = string.Join(" ;", decoder.AllKeys
    .Select(k => string.Format("{0}: {1}", k, decoder[k]).ToArray());

If you're in .NET 4.0, you can use this:

string message = string.Join(" ;", decoder.AllKeys
    .Select(k => string.Format("{0}: {1}", k, decoder[k]));

If you're not on .NET 4.0 yet, you need to convert the collection to an array:

string message = string.Join(" ;", decoder.AllKeys
    .Select(k => string.Format("{0}: {1}", k, decoder[k]).ToArray());
走走停停 2024-11-16 04:41:22

这应该有效。

decoder.AllKeys.Aggregate("", (current, item) => current + String.Format("{0}: {1} ;", item, decoder[item]));

This should work.

decoder.AllKeys.Aggregate("", (current, item) => current + String.Format("{0}: {1} ;", item, decoder[item]));
川水往事 2024-11-16 04:41:22
IEnumerable<string> query =
  from KeyValuePair<string, string> kvp in decoder
  select String.Format("{0}: {1} ;", kvp.Key, kvp.Value);

string result = string.Join(null, query);
IEnumerable<string> query =
  from KeyValuePair<string, string> kvp in decoder
  select String.Format("{0}: {1} ;", kvp.Key, kvp.Value);

string result = string.Join(null, query);
記柔刀 2024-11-16 04:41:22

如果您已经像我一样在 IEnumerable 上有一个 Join 扩展方法:

public static string Join(this IEnumerable<string> values, string separator)
{
    return string.Join(separator, values);
}

那么剩下的只是一句话:

decoder.AllKeys.Select(item => String.Format("{0}: {1}", item, decoder[item])).Join(";");

请注意,如果您不使用 .NET 4,那么您可以将扩展方法的实现替换为任何适用的方法你的版本。

编辑:
更好的是,创建以下扩展方法:

public static string Join(this IEnumerable<string> values, string separator, Func<string, string> selector)
{
    return string.Join(separator, values.Select(selector));
}

并按如下方式调用它:

decoder.AllKeys.Join(";", item => String.Format("{0}: {1}", item, decoder[item]));

除了在 NameValueCollection 或任何解码器上放置扩展方法之外,您不会得到比这更多的一行:)

If you already have a Join extension method on IEnumerable like I have:

public static string Join(this IEnumerable<string> values, string separator)
{
    return string.Join(separator, values);
}

then the rest is just a one-liner:

decoder.AllKeys.Select(item => String.Format("{0}: {1}", item, decoder[item])).Join(";");

Note that if you're not using .NET 4, then you can replace the implementation of the extension method to whatever works for your version.

EDIT:
Even better, create the following extension method:

public static string Join(this IEnumerable<string> values, string separator, Func<string, string> selector)
{
    return string.Join(separator, values.Select(selector));
}

and call it as follows:

decoder.AllKeys.Join(";", item => String.Format("{0}: {1}", item, decoder[item]));

you won't get more one-line than that, other than putting an extension method on NameValueCollection, or whatever decoder is :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文