如何将列表转换为可枚举

2024-04-14

我的以下代码有问题:

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(使用前将#替换为@)

如何将列表转换为可枚举 的相关文章

随机推荐