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

本文关键字:扩展 方法 添加 IEnumerable 接口 | 更新日期: 2023-09-27 18:00:06

我一直在尝试让我的通用扩展方法发挥作用,但它们拒绝了,我也不明白为什么。这根线对我没有帮助,尽管它应该帮助我。

当然,我已经查过如何操作了,无论我看到哪里,他们都说它很简单,应该是这样的语法:
(在一些地方,我读到我需要在参数删除后添加"where T:[type]",但我的VS2010只是说这是一个语法错误。)

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

但这根本不起作用,我得到了这个错误:

类型或命名空间名称"T"可能找不到(你是不是错过了使用指令还是程序集引用?)

如果我更换

public static class TExtensions

通过

public static class TExtensions<T>

它给出了这个错误:

必须在中定义扩展方法非通用静态类

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

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

我认为您缺少的是在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());
}

注意每个方法名称之后、参数列表之前的<T>。也就是说,它是一个具有单个类型参数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());
  }
}

您实际上还没有创建泛型方法,您已经声明了返回List<T>而不定义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());
        }
    }