使用Lambda和Func的动态构造函数<>

时间:2011-12-09 18:49:29

标签: c# linq design-patterns func

我有一个多线程应用程序,它在BlockingCollection队列上创建一个字符串列表,我想获取该字符串列表并将其转换为一个或两个步骤中的项目对象集合

是否可以创建一个功能<>或lamda方法来实现这种类型的结果

 public class item
{
    public string name { get; set; }

    public item(string nam)
    {
        name = nam;
    }


}

IList<string> alist = new string[] {  "bob","mary"};

你在哪里采取Ilist&lt;&gt;或IEnumerable&lt;&gt;类型为string并返回IList

因此对于单项Func&lt;&gt;

Func<string, item> func1 = x => new item(x);

但签名看起来很像

Func<IEnumerable<string>,IList<item>> func2 = x=> x.ForEach(i => func1(i));

我试图在sqaure洞中放置一个圆形挂钩,或者我的语法/逻辑是错误的

提前致谢

3 个答案:

答案 0 :(得分:5)

您是否只是想将IList<string>“重塑”为IList<item>

IList<string> listOfStrings = new string[] {  "bob","mary"};
IList<item> listOfItems = listOfStrings.Select(s => new item(s)).ToList();

答案 1 :(得分:4)

您必须使用Select投影而不是ForEach,然后使用IEnumerable<item>将生成的ToList()转换为列表 - 这应该有效:

Func<IEnumerable<string>,IList<item>> func2 = x => x.Select( i => new item(i)).ToList();

答案 2 :(得分:3)

IEnumerable<item> myfunc(IEnumerable<string> stringlist)
{
    var q = from s in stringlist
            select new item(s);
    return q.ToList();
}