Использовать результат делегата в качестве ввода в C # 2.0 - PullRequest
2 голосов
/ 22 октября 2010

У меня есть List<T>, и я хочу найти два случайных имени из этого List<T>, начиная с некоторого условия из List, используя .NET 2.0.

Я знаю, что это очень легко с LINQ, но я застрял2.0

Мне интересно, могу ли я сделать что-то подобное

List<foo> list = new List<foo>();
List<foo> newlist = new List<foo>();
Random r = new Random();

list.Add(new foo("1"));
list.Add(new foo("A91"));
list.Add(new foo("A01"));
list.Add(new foo("A71"));
list.Add(new foo("B02"));
list.Add(new foo("B2"));
list.Add(new foo("B03"));
list.Add(new foo("23"));
list.Add(new foo("24"));

string[] searchList = { "A", "B", "C",};

foreach (string name in searchList)
{
   List<foo> templist = list.FindAll(delegate (foo f)
                        {
                             List<foo> templist1 = f.Name.StartsWith(name);
                             {
                                if(templist1.Count>0)
                               {
                                  while (templist.Count != 0)
                                 {
                                    ??.Add(templist1[r.Next(templist1.Count)]);

                                 }
                              retrun ??
                            }
                       }
                       });


 }

Ответы [ 2 ]

1 голос
/ 22 октября 2010

Не говоря уже о том, что я лично подхожу к ограничению .NET 2.0, используя dll 3.5 System.Core и копируя локальные (как упомянул Ник Мартышенко) ...

Фактическая проблемапохоже, что вы не возвращаете правильный тип в анонимном делегате List<T>.FindAll принимает делегата Predicate<T>.Предикат возвращает bool.

List<T>.FindAll НЕ похоже на метод LINQ where.Это не ленивый.То есть, это не IEnumerable, который дает при перечислении.FindAll возвращает List<T> (уже перечислено).

Возможно, я не понимаю ваши требования здесь, но почему бы не сделать это:

List<foo> templist = list.FindAll(delegate (foo f)
                    {
                         bool itemStartsWith = f.Name.StartsWith(name);

                         if(itemStartsWith)
                         {
                            return true;
                         }
                         return false;
                    });
0 голосов
/ 22 октября 2010

Не return, но yield return.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...