【发布时间】:2019-04-27 20:00:54
【问题描述】:
我创建了两个扩展方法:FilterAnyType,作用于IEnumerable<T>,FilterMovieType,作用于IEnumerable<Movie>:
public static IEnumerable<T> FilterAnyType<T>(this IEnumerable<T> source, Func<T,bool> predicate)
{
//code goes here
}
public static IEnumerable<Movie> FilterMovieType<Movie>(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
{
//code goes here
}
然后,我创建了两个不同的列表:
var movies = new List<Movie>();
var customers = new List<Customer>();
正如预期的那样,FilterAnyType 方法可用于movie 和customers 的两个实例。但是,FilterMovieType 方法也可用于 customer 实例,我没想到会这样。
我正在学习扩展方法(因此有这种做法),我的理解是this 关键字用于标识将“添加”扩展方法的对象类型。
鉴于此,我希望 FilterMovieType 仅可用于 IEnumerable<Movie> 的实例。为什么IEnumerable<Customer>也可以使用?
谢谢!
【问题讨论】:
标签: c# .net extension-methods