如果我有一个方法,我有一个请求和一个模板列表。如何删除引用任何模板的列表中的空项?请参阅下面的代码。
由于我不知道类型我不能检查特定参数,除非该参数有一个我可以参考的类型。
public List<T> ListTest(MyRequest request, IEnumerable<T> mylist)
{
var stuff = GetStuff(request);
var noNullList = mylist.AsQueryable().Where(item != null); // <-- Error
return noNullList;
}
答案 0 :(得分:4)
错误的行应为
var noNullList = mylist.AsQueryable().Where(item => item != null).ToList();
另外,您使用AsQueryable()
的原因是什么?
由于mylist
实现IEnumerable
接口,您可以说
var noNullList = mylist.Where(item => item != null).ToList();
答案 1 :(得分:3)
你很亲密。您缺少lambda表达式中的项目:
public List<T> ListTest(MyRequest request, IEnumerable<T> mylist)
{
var stuff = GetStuff(request);
var noNullList = mylist.AsQueryable().Where(item => item != null).ToList(); // <-- Error
return noNullList;
}
答案 2 :(得分:2)
你只需要Where
扩展方法的另一个参数:它需要一个Expression<Func<T, bool>>
,而不仅仅是一个布尔值。
如果您不使用AsQueryable()
,则为Func<T, bool>
,但会“看起来一样”。
Where(m => m != null)