C# 向IEnumerable等接口添加通用扩展方法

C# 向IEnumerable等接口添加通用扩展方法,c#,generics,extension-methods,C#,Generics,Extension Methods,我一直在努力让我的泛型扩展方法工作,但它们就是拒绝,我也不明白为什么。 当然,我已经查阅了如何,在我看到的任何地方,他们都说它很简单,应该是这样的语法: (在一些地方,我读到我需要在参数decelleration之后添加“where T:[type]”,但我的VS2010只是说这是一个语法错误。) 借 公共静态类文本 它给出了以下错误: 扩展方法必须在 非泛型静态类 任何帮助都将不胜感激,我真的被困在这里。我想您缺少的是使T中的方法通用化: public static List<T&g

我一直在努力让我的泛型扩展方法工作,但它们就是拒绝,我也不明白为什么。

当然,我已经查阅了如何,在我看到的任何地方,他们都说它很简单,应该是这样的语法:
(在一些地方,我读到我需要在参数decelleration之后添加“where T:[type]”,但我的VS2010只是说这是一个语法错误。)

公共静态类文本
它给出了以下错误:

扩展方法必须在 非泛型静态类


任何帮助都将不胜感激,我真的被困在这里。

我想您缺少的是使
T
中的方法通用化:

public static List<T> ToList<T>(this IEnumerable<T> collection)
{
    return new List<T>(collection);
}

public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
{
    return new BindingList<T>(collection.ToList());
}
公共静态列表列表(此IEnumerable集合)
{
返回新列表(集合);
}
公共静态BindingList到BindingList(此IEnumerable集合)
{
返回新的BindingList(collection.ToList());
}
请注意每个方法名称后、参数列表前的
。也就是说,它是一个具有单个类型参数的通用方法,
T

请尝试:

public static class TExtensions
{
  public static List<T> ToList<T>(this IEnumerable<T> collection)
  {
      return new List<T>(collection);
  }

  public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
  {
      return new BindingList<T>(collection.ToList());
  }
}
公共静态类文本
{
公共静态列表列表(此IEnumerable集合)
{
返回新列表(集合);
}
公共静态BindingList到BindingList(此IEnumerable集合)
{
返回新的BindingList(collection.ToList());
}
}

您实际上还没有创建泛型方法,您已经声明了返回
列表而不定义T的非geeneric方法。您需要进行如下更改:

public static class TExtensions
    {
        public static List<T> ToList<T>(this IEnumerable<T> collection)
        {
            return new List<T>(collection);
        }

        public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
        {
            return new BindingList<T>(collection.ToList());
        }
    }
公共静态类文本
{
公共静态列表列表(此IEnumerable集合)
{
返回新列表(集合);
}
公共静态BindingList到BindingList(此IEnumerable集合)
{
返回新的BindingList(collection.ToList());
}
}

哦,天哪,我就知道是那样愚蠢的事情。非常感谢!真不敢相信我错过了>
public static List<T> ToList<T>(this IEnumerable<T> collection)
{
    return new List<T>(collection);
}

public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
{
    return new BindingList<T>(collection.ToList());
}
public static class TExtensions
{
  public static List<T> ToList<T>(this IEnumerable<T> collection)
  {
      return new List<T>(collection);
  }

  public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
  {
      return new BindingList<T>(collection.ToList());
  }
}
public static class TExtensions
    {
        public static List<T> ToList<T>(this IEnumerable<T> collection)
        {
            return new List<T>(collection);
        }

        public static BindingList<T> ToBindingList<T>(this IEnumerable<T> collection)
        {
            return new BindingList<T>(collection.ToList());
        }
    }