【问题标题】:Extension Method Listed for Non Supported Type. Why?为不受支持的类型列出的扩展方法。为什么?
【发布时间】:2019-04-27 20:00:54
【问题描述】:

我创建了两个扩展方法:FilterAnyType,作用于IEnumerable<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 方法可用于moviecustomers 的两个实例。但是,FilterMovieType 方法也可用于 customer 实例,我没想到会这样。

我正在学习扩展方法(因此有这种做法),我的理解是this 关键字用于标识将“添加”扩展方法的对象类型。

鉴于此,我希望 FilterMovieType 仅可用于 IEnumerable&lt;Movie&gt; 的实例。为什么IEnumerable&lt;Customer&gt;也可以使用?

谢谢!

【问题讨论】:

    标签: c# .net extension-methods


    【解决方案1】:

    您的第二种方法仍然是通用的,只是您将参数命名为Movie,而不是TFilterMovieType 上定义的 Movie 与实际的 Movie 类无关,它只是一个占位符。 要修复它,请删除方法名称后的&lt;Movie&gt;,即:

    public static IEnumerable<Movie> FilterMovieType(this IEnumerable<Movie> source, Func<Movie, bool> predicate)
    {
         //code goes here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多