2017-10-07 24 views
2

我有一個靜態類DataSource從文件拉動請求的數據,並返回它作爲一個List<IInfrastructureEntity>.TestRepository(下圖),這是我在通用TEntity ,確定其類別類型並從DataSource中提取相應的數據,或者至少嘗試。相反,我在每個return語句上得到以下編譯時錯誤。即使任何TEntity必然實施IInfrastructureEntity轉換列表<IInfrastructureEntity>列出<TEntity>其中通用類型TEntity不一定實現該接口

無法隱式轉換類型「System.Collections.Generic.List<IInfrastructureEntity>」到「System.Collections.Generic.List<TEntity>

如何明確地作出這樣的轉變?

public class TestRepository<TEntity> : IRepository<TEntity> where TEntity : IInfrastructureEntity 
{ 
    public List<TEntity> GetData() 
    { 
     TEntity checkType = default(TEntity); 
     if (checkType is Member) return DataSource.Members; 
     if (checkType is MenuItem) return DataSource.MenuItems; 
     if (checkType is CRAWApplication) return DataSource.CRAWApplications; 
     if (checkType is CRAWEntitlement) return DataSource.CRAWEntitlements; 
     if (checkType is FOXGroup) return DataSource.FOXGroups; 

     throw new NotSupportedException(checkType.ToString() + " is not yet supported"); 
    } 

    public List<TEntity> FindBy(Expression<Func<TEntity, bool>> predicate) 
    { 
     return GetData().AsQueryable().Where(predicate); 
    } 

} 

回答

2

您可以在每個列表堂堂一個明確的轉換你的回報解決這個問題:

if (checkType is Member) return DataSource.Members.Cast<TEntity>().ToList(); 

的問題是,DataSource.Members類型爲List<IInfrastructureEntity>,而這預計要返回的類型一個List<TEntity>。事實上,每個Entity應該實施IInfrastructureEntity,因爲您已將此標記爲where TEntity : IInfrastructureEntity。但是,即使一個類型實現了這個接口,也並不意味着這個類型可以隱式轉換爲TEntity對象。這就是爲什麼你需要明確演員。

+0

Oy!那是什麼?謝謝。 – Joe

+0

@Joe歡迎您!我很高興我的幫助。 – Christos

相關問題