2014-01-10 2 views
2

Это странно, я пытаюсь инициализировать мой ICollection со списком в моем конструкторе, и это происходит:C# Список для ICollection

Schedules = new List<BookingSchedule>(); //OK 
CateringItems = new List<CateringItem>(); //Not 

Свойства:

public virtual ICollection<BookingSchedule> Schedules { get; set; } 
public virtual ICollection<BookedCateringItem> CateringItems { get; set; } 

Ошибка:

Error 1 Cannot implicitly convert type 
'System.Collections.Generic.List<MyApp.Models.CateringItem>' to 
'System.Collections.Generic.ICollection<MyApp.Models.BookedCateringItem>'. 
An explicit conversion exists (are you missing a cast?) 

Я не вижу разницы между ними. Я схожу с ума, пытаясь понять это. Есть идеи?

+3

Вы пытаетесь присвоить список 'BookedCateringItem' для коллекции' CateringItem'. Типы не совпадают - вот в чем разница –

+0

Что такое BookedCateringItem? Попробуйте новый список () – JleruOHeP

+1

Вы должны прочитать о 'Covariance'. см. http://tomasp.net/blog/variance-explained.aspx/ – haim770

ответ

1

CateringItems - это коллекция BookedCateringItem, при инициализации вы инициализировали список CateringItem.

, по-видимому, они не совместимы ...

2
public virtual ICollection<BookedCateringItem> CateringItems { get; set; } 
    CateringItems = new List<CateringItem>(); 

Это разные типы, BookedCateringItem и CateringItem. Вы должны изменить один из них на другой тип.

0

Вы хотите назначить List<CateringItem> на ICollection<BookedCateringItem> Так что вы не можете.

6

Вы можете преобразовать List<T1> в ICollection<T2>, если типы T1 и T2 совпадают. Кроме того, вы можете преобразовать в необщего ICollection

ICollection CateringItems = new List<CateringItem>(); // OK 
+0

Готово. И +1 для дополнительного предложения о не-generic 'ICollection', которое в определенных обстоятельствах (модели просмотра WPF) может быть желательно. –

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