C# 为不受支持的类型列出的扩展方法。为什么?

C# 为不受支持的类型列出的扩展方法。为什么?,c#,.net,extension-methods,C#,.net,Extension Methods,我创建了两个扩展方法:对IEnumerable操作的FilterAnyType和对IEnumerable操作的FilterMoveType: 然后,我创建了两个不同的列表: var movies = new List<Movie>(); var customers = new List<Customer>(); 正如所料,FilterAnyType方法可用于电影和客户实例。但是,方法FilterMovieType也可用于客户实例,我没有预料到这一点 我正在学习扩展方法,

我创建了两个扩展方法:对IEnumerable操作的FilterAnyType和对IEnumerable操作的FilterMoveType:

然后,我创建了两个不同的列表:

var movies = new List<Movie>();
var customers = new List<Customer>();
正如所料,FilterAnyType方法可用于电影和客户实例。但是,方法FilterMovieType也可用于客户实例,我没有预料到这一点

我正在学习扩展方法,因此我采用了这种做法,我的理解是,this关键字用于标识将添加扩展方法的对象类型

有鉴于此,我希望FilterMoveType只对IEnumerable的实例可用。为什么IEnumerable也可以使用它


谢谢

您的第二个方法仍然是泛型,只有您将param Movie命名为,而不是T。在FilterMovieType上定义的Movie与实际的Movie类没有关系,它只是一个占位符。 要修复此问题,请在方法名称后删除,即:

public static IEnumerable<Movie> FilterMovieType(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
{
     //code goes here
}

您的第二个方法仍然是泛型的,只是您命名了param Movie,而不是T。在FilterMovieType上定义的Movie与实际的Movie类没有关系,它只是一个占位符。 要修复此问题,请在方法名称后删除,即:

public static IEnumerable<Movie> FilterMovieType(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
{
     //code goes here
}