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

本文关键字:函数 静态 编译器 | 更新日期: 2023-09-27 18:16:33

我不知道为什么,但是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;
}

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

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

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

扩展方法需要定义为静态类中的静态方法。

扩展方法定义为静态方法,但使用实例方法语法调用。它们的第一个参数指定方法操作的类型,参数前面有this修饰符。扩展方法只有在使用using指令显式地将命名空间导入到源代码中时才会出现在作用域中。

如果你想定义'normal'方法,删除this关键字,它将成为你的类的实例方法。