[英]Extension Method Listed for Non Supported Type. Why?
我创建了两个扩展方法: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
}
然后,我创建了两个不同的列表:
var movies = new List<Movie>();
var customers = new List<Customer>();
如预期的那样, FilterAnyType
方法可用于movie
实例和customers
实例。 但是,方法FilterMovieType
也可用于customer
实例,而我并不期望这样。
我正在学习扩展方法(因此有这种做法),而我的理解方式是this
关键字用于标识扩展方法将被“添加”到的对象类型。
鉴于此,我希望FilterMovieType
仅对IEnumerable<Movie>
实例可用。 为什么IEnumerable<Customer>
也可以使用它?
谢谢!!
第二种方法仍然是通用方法,只是您将参数Movie
命名为T
而不是T
在FilterMovieType
上定义的Movie与实际的Movie类无关,它只是一个占位符。 要解决此问题,请在方法名称后删除<Movie>
,即:
public static IEnumerable<Movie> FilterMovieType(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
{
//code goes here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.