2013-11-22 6 views
0

임 EntitFramework 작업 내 엔티티 클래스를 생성하는C 번호 : 나는이 수업이</p> <p>: ICollection이 같은 유형으로 인터페이스 ICollection이는 <ILocalized>

public class Car 
{ 
    //... 
    public String Brand { get; set; } 
    //... 

    public virtual ICollection<CarLocalized> CarLocalizeds { get; set; } 
    //... 
} 

public class CarLocalized :ILocalized 
{ 
    public int LangID { get; set; } 

    public Lang Lang { get; set; } 
} 

public static class Helper { 
    public static List<String> GetLangIDList(ICollection<ILocalized> list) 
    { 
     //I want all the ID of the lang where car is translated for: 
     var somethin = list.Select(m => m.LCID_SpracheID.ToString()).ToList(); 
     return somethin; 
    } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Translated() 
    { 
     Car car = db.Cars.Find(2); 
     List<String> transletedIDs = Helper.GetLangIDList(car.CarLocalizeds); 

     return View(transletedIDs); 
    } 

} 

하지만 지금은 문제를 그

List<String> transletedIDs = Helper.GetLangIDList(car.CarLocalizeds); 

이 작동하지 않습니다. 왜 ICollection에 서명을 설정하지 않고 CarLocalized가 Signature에 필요한 인터페이스를 구현하는 ICollection을 제공 할 수 있습니까 ??

답변

1

문제가 ICollection<T>입니다

제발 도와주세요 ...

THX는 "공변"아니다. 그것은 GetLangIDList 메서드는 목록을 수정하지 않는 것, 그것은 단지 목록을 쿼리합니다. 이 경우 "공분산"인 IEnumerable<T>을 사용할 수 있습니다.

public static List<String> GetLangIDList(IEnumerable<ILocalized> list) 
{ 
    //I want all the ID of the lang where car is translated for: 
    var somethin = list.Select(m => m.LCID_SpracheID.ToString()).ToList(); 
    return somethin; 
} 

더 읽기에 대한 Covariance and Contravariance in GenericsFaq

+0

완벽하게! 고마워요! – scarnapper