包含泛型的 扩展方法为什么编译不通过

public static class ListExten<T>
{
    public static IList<T> ForeachOne(this IList<T> eles, Action<T> act)
    {
        foreach (T e in eles)
        {
            if (act != null)
            {
                act(e);
            }
        }
        return eles;
    }
}
为什么Error    26    Extension method must be defined in a non-generic static class    
阅读 5.2k
1 个回答

大哥,你用Google翻译就知道Extension method must be defined in a non-generic static class 的意思是 扩展方法必须在非泛型静态类中定义。

扩展方法是静态方法,而且扩展方法是加载到this中的使用的,也就是说和定义此方法的类没有关系,所以你类中定义泛型,在使用时没办法设置泛型参数

一般泛型类静态方法调用

ListExten<string>.ForeachOne()

泛型参数通过类传递到方法
而扩展方法完全隐藏了ListExten类所以无法通过类传递泛型参数。

应该定义到方法上,

static IList<T> foreachOne<T>(this IList<T> list)

就可以通过

List<string>.foreachOne<string>()

简写成

List<string>.foreachOne()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进