我可以在可能为空的列表上使用扩展方法吗?如果是这种情况,那么可以在扩展方法内部实例化它?
在适用于它的扩展方法中实例化列表...听起来像是当您尝试从列表中添加或删除项目时,您正在使用foreach循环进行迭代。
public static void AddOrUpdate(this List<blabla> i, Person p)
{
i = i ?? new List<blabla>(); //Is it OK no instantiate inside?
i.RemoveAll(t => t.Id == p.Id && t.Role == RoleEnum.Admin);
i.Add(p); //Since it is a reference type, I dont need to return it (even "this" parameter) right?
}
然后像这样使用它:
//List<blabla> TeamWork comes from anywhere else, instantiated or not
TeamWork.AddOrUpdate(aPersonA);
TeamWork.AddOrUpdate(aPersonB);
DoSomething(Teamwork);
最佳答案
不,这将不起作用,因为该参数应作为ref
传递,并且不能将ref
与this
关键字结合使用。
但是您总是可以做一些喜欢的事情:
public static List<blabla> AddOrUpdate(this List<blabla> i, Person p)
{
i = i ?? new List<blabla>();
i.RemoveAll(t => t.Id == p.Id && t.Role == RoleEnum.Admin);
i.Add(p);
return i;
}
TeamWork = TeamWork.AddOrUpdate(aPersonA);
TeamWork = TeamWork.AddOrUpdate(aPersonB);
DoSomething(Teamwork);