IEnumerable vs list - PullRequest
       8

IEnumerable vs list

3 голосов
/ 11 августа 2010

Это правильное использование IEnumerable или оболочки, которую я использую List?
что мне нужно положить в <PropertyInfo>?

public static IEnumerable<PropertyInfo> GetNewsList<T>(int FID)
    {
        CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb();
        return (from nls in pg.NewsCat_ITEMs
                  join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID
                  where vi.VI_VF_ID == FID
                  select new { nls, vi });


    }

или

 public List<PropertyInfo> GetPublic<T>(int FID)
    {
        CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb();
        var nl = (from nls in pg.NewsCat_ITEMs
                join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID
                where vi.VI_VF_ID == FID
                select new { nls, vi });

        List<PropertyInfo> retList = new List<PropertyInfo>();

        foreach (var item in nl)
        {
             retList.Add(item);
        }


        return retList;
    }

Ответы [ 3 ]

3 голосов
/ 11 августа 2010

Это зависит от того, что вы хотите сделать с результатом. IEnumerable в основном поддерживает итерации только по результатам, содержащимся в коллекции. IList является более конкретным и позволяет:

  • Узнайте, сколько предметов в коллекции, не просматривая их все
  • Простой доступ к элементу в определенной позиции в списке
  • Добавить или удалить элементы из списка

между прочим. Если вам не нужны дополнительные функции, я бы вернул IEnumerable. Вызывающий ваш метод может легко сделать то, что вы сделали, чтобы добавить элементы в список.

3 голосов
/ 11 августа 2010

Список является инстейстом типа, который реализует IEnumerable.Что это означает?Что если вы хотите вернуть IEnumerable<PropertyInfo>, вы должны создать его список (или массив и т. Д.), А затем вернуть его. Из-за пределов метода будет выглядеть, как будто вы возвращаете IEnumerable<PropertyInfo>, но на самом делебыть List<PropertyInfo>.

О вашем запросе ... Вы должны выбрать объект типа PropertyInfo, но сейчас вы возвращаете какой-то тип анонимной.Вы должны попробовать это так:

public static IEnumerable<PropertyInfo> GetNewsList<T>(int FID)
{
    CatomWebNetDataContext pg = (CatomWebNetDataContext)db.GetDb();
    var result from nls in pg.NewsCat_ITEMs
               join vi in pg.VIRTUAL_ITEMs on nls.NC_VI_ID equals vi.VI_ID
               where vi.VI_VF_ID == FID
               select new PropertyInfo { SomeMember = nls, SomeOtherMember = vi };

    return result.ToList();
}
0 голосов
/ 11 августа 2010

Вы можете вернуть List<PropertyInfo>, учитывая, что это реализация IEnumerable<PropertyInfo>. Единственное, что будет выглядеть как старая функция IEnumerable для вызывающей функции после ее возврата.

...