我可以在可能为空的列表上使用扩展方法吗?如果是这种情况,那么可以在扩展方法内部实例化它?

在适用于它的扩展方法中实例化列表...听起来像是当您尝试从列表中添加或删除项目时,您正在使用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传递,并且不能将refthis关键字结合使用。

但是您总是可以做一些喜欢的事情:

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);

10-06 11:11