找不到扩展方法(不是程序集引用问题)

本文关键字:程序集 引用 问题 扩展 方法 找不到 | 更新日期: 2023-09-27 18:26:46

我有以下扩展方法:

public static EntitySet<T> ToEntitySetFromInterface<T, U>(this IList<U> source)
    where T : class, U
{
    var es = new EntitySet<T>();
    IEnumerator<U> ie = source.GetEnumerator();
    while (ie.MoveNext())
    {
        es.Add((T)ie.Current);
    }
    return es;
}

我正试图按如下方式使用它:

   List<IItemMovement> p = new List<IItemMovement>();
    EntitySet<ItemMovement> ims = p.ToEntitySetFromInterface<ItemMovement, IItemMovement>();

其中ItemMovement实现IItemMovement。编译器抱怨:

"System.Collections.Generic.List"不包含"ToEntitySetFromInterface"的定义,没有扩展方法"ToEntitySetFromInterface"接受类型为的第一个参数未能找到"System.Collections.Generic.List"(分别为缺少using指令或程序集引用?)

不,我没有错过推荐信。如果我只键入包含方法的静态类的名称,它就会弹出,扩展方法也会弹出。Thnx

找不到扩展方法(不是程序集引用问题)

这段代码对我有效,它是您代码的直接副本,减去ItemMovement及其接口,所以这部分可能有问题?

public class TestClient
{
    public static void Main(string[] args)
    {
        var p = new List<IItem>();
        p.Add(new Item { Name = "Aaron" });
        p.Add(new Item { Name = "Jeremy" });
        var ims = p.ToEntitySetFromInterface<Item, IItem>();
        foreach (var itm in ims)
        {
            Console.WriteLine(itm);
        }
        Console.ReadKey(true);
    }
}
public class Item : IItem
{
    public string Name { get; set; }
    public override string ToString()
    {
        return Name;
    }
}
public interface IItem
{
}
public static class ExtMethod
{
    public static EntitySet<T> ToEntitySetFromInterface<T, U>(this IList<U> source) where T : class, U
    {
        var es = new EntitySet<T>();
        IEnumerator<U> ie = source.GetEnumerator();
        while (ie.MoveNext())
        {
            es.Add((T)ie.Current);
        }
        return es;
    }
}

编译器错误的这一部分是关键:"没有扩展方法'ToEntitySetFromInterface'接受类型为'System.Collections.Generic.List'的第一个参数"。

您的ToEntitySetFromInterface<T,U>扩展方法被定义为接受IList<U>,但您试图用List<T>而不是IList<T>来调用它。编译器找不到您的扩展方法,因为类型不匹配。