我创建了两个扩展方法:FilterAnyType上运行IEnumberable<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
}
Run Code Online (Sandbox Code Playgroud)
然后,我创建了两个不同的列表:
var movies = new List<Movie>();
var customers = new List<Customer>();
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,该FilterAnyType方法可用于的两个实例movie和customers。但是,该方法FilterMovieType也可用于customer实例,并且我没有想到这一点。
我正在学习扩展方法(因此有这种做法),而我的理解方式是,该this关键字用于标识扩展方法将被“添加”到的对象的类型。
鉴于此,我希望FilterMovieType仅适用于的实例IEnumerable<Movie>。为什么也可以使用IEnumerable<Customer>?
谢谢!!
Les*_*iak 10
第二种方法仍然是通用方法,只有您为param命名Movie,而不是T。定义的Movie FilterMovieType与实际的Movie类无关,它只是一个占位符。要解决此问题,请<Movie>在方法名称后删除,即:
public static IEnumerable<Movie> FilterMovieType(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
{
//code goes here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |