Динамический конструктор, использующий Lambda и Func <> - PullRequest
1 голос
/ 09 декабря 2011

У меня есть многопоточное приложение, которое создает список строк в очереди BlockingCollection. Я хочу взять этот список строк и преобразовать его в коллекцию объектов элементов за один или два шага

Можно ли создать метод func <> или lamda для достижения такого типа результата

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

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


}

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

Где вы берете Ilist <> или IEnumerable <> типа string и возвращаете IList

Так что для одного элемента Func <>

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

Но по сути подпись будет выглядеть как

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

Пытаюсь ли я поставить квадратный колышек в квадратное отверстие или мой синтаксис / логика неверен

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 09 декабря 2011

Вы просто пытаетесь "изменить" IList<string> как IList<item>?

IList<string> listOfStrings = new string[] {  "bob","mary"};
IList<item> listOfItems = listOfStrings.Select(s => new item(s)).ToList();
4 голосов
/ 09 декабря 2011

Вы должны будете использовать Select проекцию вместо ForEach, а затем преобразовать полученный IEnumerable<item> в список, используя ToList() - это должно работать:

Func<IEnumerable<string>,IList<item>> func2 = x => x.Select( i => new item(i)).ToList();
3 голосов
/ 09 декабря 2011
IEnumerable<item> myfunc(IEnumerable<string> stringlist)
{
    var q = from s in stringlist
            select new item(s);
    return q.ToList();
}
...