我遇到了以下代码的问题:
public IEnumerable<ISession> GetSessions()
{
// ...
using (ProvaDbEntities DBEntities = new ProvaDbEntities(Utilities.ToEntitiesConnectionString()))
{
ObjectQuery<session> sessions = DBEntities.session;
IEnumerable<session> q1 = from session in sessions
where session.site == this.Name
select session;
List<Session> sessionList = new List<Session>();
foreach (var s in q1)
{
sessionList.Add(new Session(s.id.ToString(),s.username, s.site, new DateTime()));
}
IEnumerable<Session> res = sessionList;
return sessionList;
}
}
异常(exception)情况是:
Is not possible to cast object type 'System.Collections.Generic.List`1[prova3.Session]' to type 'System.Collections.Generic.IEnumerable`1[TAP2009.AuctionSite.Interfaces.ISession]'.
查看this SO question这似乎是正确的。我错了吗?
最佳答案
应该没问题,只要Session
工具 ISession
- 如果您使用的是 C# 4 和 .NET 4。如果您不是,则不会。
请注意,您提到的问题在两种情况下都使用相同的“T”——而您遇到的异常(exception)是关于转换 List<Session>
到IEnumerable<ISession>
.你没有说明你在哪里得到异常,这使得更难准确地看到发生了什么......你确定这是实际上失败的代码吗?您确定您遇到的是异常而不是编译时错误吗?
编辑:如果您不使用 .NET 4 和 C# 4,协方差的解决方法在这里相当简单 - 使用 Cast<T>()
LINQ 运算符:
return sessionList.Cast<ISession>();
关于c# - 如何将列表转换为 ienumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075393/