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