2016-05-27 3 views
-1

Я знаю, что такие вопросы существуют, я прошел через все из них - не помог. Вот мой класс:Невозможно неявно преобразовать тип 'System.Collections.Generic.List <>' в 'IList <>'. Явное преобразование существует (вам не хватает роли?)

public class EventService : IEventService 
    { 
     TournamentContext db = new TournamentContext(); 

     public IList<Event> GetEvents() 
     { 
      List<Event> events = new List<Event>(); 

      IQueryable<Event> eventsList = from s in db.Event 
         select s; 
      events = eventsList.ToList(); 

      return events; 
     } 
} 

Я получил сообщение об ошибке:

Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.List' to 'Tournament.Services.Events.IList'. An explicit conversion exists (are you missing a cast?) Tournament.Services

не могу понять, как преобразовать System.Collections.Generic.List <>»в 'IList <>' пытался this и несколько других, но это не сработало.

UPDATE:

Реализация обслуживаемого решения и изменения IEventInterface это прекрасно работает в настоящее время:

public System.Collections.Generic.IList<Event> GetEvents() { 

     var events = from s in db.Event 
        select s; 

     return events.ToList(); 
    } 
+2

Почему вы создаете новый список с помощью 'List events = new List ();' только чтобы выбросить его и заменить его на 'events = eventsList.ToList();'? –

+4

Есть ли вероятность, что вы использовали инструмент рефакторинга и случайно создали класс 'IList ' самостоятельно? Это должно работать, и ваше сообщение об ошибке не отображает полное имя для 'IList ' – Jonesopolis

+0

@roryap Ну, я попытался реализовать то, что предлагается здесь http://stackoverflow.com/questions/3402822/cannot-implicitly-convert -type-system-linq-iqueryable-to-system-collections-g – Simon

ответ

1

Где-то в вашем коде или в DLL вы ссылочного вы создали интерфейс или класс Tournament.Services.Events.IList<T>, ваш код, когда вы делаете

public IList<Event> GetEvents() 

на самом деле делает

public Tournament.Services.Events.IList<Event> GetEvents() 

List<T> встроенный в .NET не поддерживает свой интерфейс, вы должны использовать IList<T>, поставляемой вместе с .NET. Сделайте свою функцию

public System.Collections.Generic.IList<Event> GetEvents() 

и что должен это исправить сейчас, но я очень рекомендую вам переименовать или удалить IList в Tournament.Services.Events имен, чтобы предотвратить эту проблему в будущем.

+0

Я заменил его в других функциях и IEventService - теперь работает! :) – Simon

Смежные вопросы

 Смежные вопросы