Метод расширения не найден (нет ссылки на сборку) - PullRequest
4 голосов
/ 06 марта 2012

У меня есть следующий метод расширения:

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

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Этот код работает для меня и является прямой копией вашего кода, за исключением 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;
    }
}
1 голос
/ 06 марта 2012

Эта часть ошибки компилятора является ключевой: «метод расширения« ToEntitySetFromInterface »не принимает первый аргумент типа« System.Collections.Generic.List »».

Ваш метод расширения ToEntitySetFromInterface<T,U> определен для принятия IList<U>, но вы пытаетесь вызвать его с List<T> вместо IList<T>. Компилятор не находит ваш метод расширения, потому что тип не совпадает.

...