我的以下代码有问题:
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;
}
}
例外情况是:
无法将对象类型“System.Collections.Generic.List`1[prova3.Session]”转换为类型“System.Collections.Generic.IEnumerable`1[TAP2009.AuctionSite.Interfaces.ISession]”。
看着这个问题 https://stackoverflow.com/questions/472669/c-freely-convert-between-listt-and-ienumerablet这似乎是正确的。我错了吗?
应该没问题,只要Session
实施ISession
- if您正在使用 C# 4 和 .NET 4。如果您没有使用,那就不会。
请注意,您提到的问题在两种情况下都使用相同的“T” - 而您遇到的例外是关于转换List<Session>
to an IEnumerable<ISession>
。您还没有说明在哪里得到异常,这使得准确了解发生了什么变得有点困难......您确定这是吗actually失败的代码?您确定收到异常而不是编译时失败吗?
编辑:如果您不使用 .NET 4 和 C# 4,协方差的解决方法在这里相当简单 - 使用Cast<T>()
LINQ 运算符:
return sessionList.Cast<ISession>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)