c# - 如何将列表转换为 ienumerable

标签 c# list ienumerable casting

我遇到了以下代码的问题:

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/

相关文章:

Python 比较日期范围列表

python - 拆分包含字符串和整数的列表

C#:是否可以返回 IOrderedEnumerable<T>?

c# - Cosmos DB 中是否支持使用 OData 进行分页?

c# - 请求身份验证 token 的应用程序被禁用或配置不正确

swift - 无法使 Realm List<T> 符合 NSCopying

c# - 将数据表转换为 ienumerable<anonymous>?

c# - 为什么 IEnumerable<T> 继承自 IEnumerable?

c# - ASP.NET 线程 - 我可以使用异步方法还是使用线程?

c# - 文本框 SelectAll 无法正常工作