簡體   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