我有一个IEnumerable<byte>
我要转换为new object { byte property1, byte property2, ....}
,将所有这些字节值连接到一个对象中。
我如何使用LINQ做到这一点?
答案 0 :(得分:0)
我不知道您为什么要实现,但我认为有一种方法,使用System.Dynamics
中的ExpandoObject
。
可以使用LINQ中的Aggregate
方法完成:
return source.Select((x, i) => new {name = string.Format("{0}{1}", propertyPrefix, i), value = x})
.Aggregate((new ExpandoObject()) as IDictionary<string, Object>,
(e, i) =>
{
e[i.name] = i.value;
return e;
}, e => e as ExpandoObject);
您应该将其隐藏在其他扩展方法下,例如ToExpandoObject
:
public static ExpandoObject ToExpandoObject<TSource>(this IEnumerable<TSource> source, string propertyPrefix)
{
return source.Select((x, i) => new {name = string.Format("{0}{1}", propertyPrefix, i), value = x})
.Aggregate((new ExpandoObject()) as IDictionary<string, Object>,
(e, i) =>
{
e[i.name] = i.value;
return e;
}, e => e as ExpandoObject);
}
用法:
var source = new List<int>() {123, 234, 345, 456, 567, 678};
var t = source.ToExpandoObject("Property");