编译器让我让这个函数变为静态

时间:2016-11-07 08:58:12

标签: c# linq

我不知道为什么,但是visual studio的编译器让我让这个函数变得静态。

我有很多字符串列表

List<string> universe = new List<string>();
List<string> foo1 = new List<string>();
List<string> foo2 = new List<string>();
List<string> foo3 = new List<string>();
.
.
.
List<string> fooN = new List<string>();

有些列表可能是空的而其他列表有数据,我想在有数据的人之间交叉,所以我做了这个功能:

public List<string> IntersectIgnoreEmpty(this List<string> list, List<string> other)
{
    if (other.Any())
        return list.Intersect(other).ToList();
    return list;
}

它给了我错误,直到我把它变成静态。我不知道为什么。

1 个答案:

答案 0 :(得分:6)

您正在定义扩展方法,因为您已将this关键字添加到第一个参数。

需要定义扩展方法as a static method in a static class

  

扩展方法被定义为静态方法,但是通过使用实例方法语法来调用。它们的第一个参数指定方法操作的类型,参数前面是 this 修饰符。当您使用using指令将命名空间显式导入源代码时,扩展方法仅在范围内。

如果您想要定义“普通”方法,请删除this关键字,它将是您班级的实例方法。