gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:37 25 4
gpt4 key购买 nike

我创建了两个扩展方法:FilterAnyTypeIEnumerable<T> 上运行, 和 FilterMovieTypeIEnumerable<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 .在 FilterMovieType 上定义的电影与实际的 Movie 类无关,它只是一个占位符。要修复它,请删除 <Movie>在方法名之后,即:

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

关于c# - 为不支持的类型列出的扩展方法。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com