我嘗試創建的泛型方法的簽名有問題。C#通用方法聲明
的類是如下:
public class MarketDataRepository : IRepository
{
MarketWatchEntities _dbContext = new MarketWatchEntities();
public MarketDataRepository(){}
public MarketDataRepository(MarketWatchEntities dbContext)
{
_dbContext = dbContext;
}
public IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime) where T : MarketDataPoint
{
return _dbContext.MarketDataPoints.Where(x => x.ReferenceDateTime >= startDateTime && x.ReferenceDateTime <= endDateTime).ToList();
}
}
public interface IRepository
{
IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime) where T : MarketDataPoint;
}
其他信息: MarketWatchEntities
延伸DbContext
(由實體框架生成)。
我得到這個編譯時異常:
Cannot implicitly convert type 'System.Collections.Generic.List<MarketWatcher.Domain.MarketDataPoint>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
我原以爲這是我的約束T
從MarketDataPoint
繼承的基礎上確定。所以,我認爲我將能夠返回MarketDataPoint
的IEnumerable
。
任何指針,以上哪些是錯誤的,我應該做什麼,而不是非常感激!
解決方案(謝謝大家):
public class MarketDataMarketDataRepository : IMarketDataRepository
{
MarketWatchEntities _dbContext = new MarketWatchEntities();
public MarketDataMarketDataRepository(){}
public MarketDataMarketDataRepository(MarketWatchEntities dbContext)
{
_dbContext = dbContext;
}
public IQueryable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime) where T : MarketDataPoint
{
return _dbContext.MarketDataPoints.Where(x => x.ReferenceDateTime >= startDateTime && x.ReferenceDateTime <= endDateTime).OfType<T>();
}
}
爲什麼您將GetMarketData方法放入您的IRepository接口?聞起來像是在你的設計中休息 –
KroaX
你絕對是對的。這將從IRepostory擴展爲IMarketDataRepository。 –