繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM