具有内部实例化的空列表上的扩展方法

时间:2017-07-28 03:58:22

标签: c# list extension-methods argumentnullexception

我可以在可能为null的列表上使用扩展方法吗?如果是这种情况,那么只需在Extension方法内实现它吗?

列出适用于它的扩展方法中的列表...听起来就像当你尝试在列表中添加或删除你正在使用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);

1 个答案:

答案 0 :(得分:3)

不,这不起作用,因为参数应该作为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);