这是IEnumerable
或shell使用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;
}
答案 0 :(得分:3)
列表是类型的实例,它实现了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();
}
答案 1 :(得分:3)
这取决于你想对结果做什么。 IEnumerable基本上只支持迭代集合中包含的结果。 IList更具体,允许您:
等等。如果您不需要额外的功能,我会返回IEnumerable。您的方法的调用者可以轻松地执行将项目添加到List中所执行的操作。
答案 2 :(得分:0)
您可以返回List<PropertyInfo>
,因为它是IEnumerable<PropertyInfo>
的实现。唯一的一点就是它一旦返回就会看起来像调用函数的普通旧IEnumerable
。