一行 LINQ 用于将字符串 [] 平展为字符串
本文关键字:字符串 用于 一行 LINQ | 更新日期: 2023-09-27 17:57:08
我想出了下面的foreach,但我希望这可以在一行中完成.. 也许是linq?任何想法将不胜感激。
foreach (string item in decoder.AllKeys)
{
message += String.Format("{0}: {1} ;", item, decoder[item]);
}
var message = string.Join(
";",
decoder.AllKeys
.Select(x => string.Format("{0}: {1} ", x, decoder[item]))
.ToArray()
);
BCL 的 String 类已经支持此功能。下面是使用 String 类实现此目的的一行。如果BCL操作在那里可用,我会一直使用它,考虑到MS的人已经竭尽全力优化这样一个关键的类。
String.Join(";", decoder.AllKeys);
下面是此方法的所有变体的 MSDN 链接 - http://goo.gl/kmwfYt
如果你使用的是 .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());
这应该有效。
decoder.AllKeys.Aggregate("", (current, item) => current + String.Format("{0}: {1} ;", item, decoder[item]));
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 上有一个 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上放置一个扩展方法,或者任何解码器:)