向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>
它给出了这个错误:
必须在中定义扩展方法非通用静态类
任何帮助都将不胜感激,我真的被困在这里了。
我认为您缺少的是在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());
}
}