【问题标题】:Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerator<T>' because it is not a delegate type无法将 lambda 表达式转换为类型“System.Collections.Generic.IEnumerator<T>”,因为它不是委托类型
【发布时间】:2016-03-14 17:08:12
【问题描述】:

我最初的搜索是“模拟 dbsets 不会返回所有条目”,我发现一个条目似乎描述了我的问题。

DbSet mock, no results while calling ToList secondly

但是,该解决方案使用以下语法

q.Setup(m => m.GetEnumerator()).Returns( () => queryableData.GetEnumerator() );

这给了我这个编译器错误 “无法将 lambda 表达式转换为类型 'System.Collections.Generic.IEnumerator',因为它不是委托类型”

其他搜索建议我添加我已经拥有的 using 语句:

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data;

这是我的方法(我使用的是 RhinoMocks,而另一张海报使用的是 Moq,但我认为这不是我的问题)

private static IDbSet<T> GetDbSetTestDouble<T>(List<T> data) where T : class
    {
        IQueryable<T> queryable = data.AsQueryable();

        IDbSet<T> dbSet = MockRepository.GenerateMock<IDbSet<T>, IQueryable>();

        dbSet.Stub(m => m.Provider).Return(queryable.Provider);
        dbSet.Stub(m => m.Expression).Return(queryable.Expression);
        dbSet.Stub(m => m.ElementType).Return(queryable.ElementType);

        // Cannot convert lambda expression to type 'System.Collections.Generic.IEnumerator<T>' because it is not a delegate type
        dbSet.Stub(m => m.GetEnumerator()).Return( () => queryable.GetEnumerator());
    }

【问题讨论】:

  • 我认为您只需要删除 lambda 部分(例如 () =&gt;)并返回告诉它返回 queryableData.GetEnumerator() 的结果。

标签: c# linq generics lambda


【解决方案1】:

正如错误试图告诉您的那样,.Return 需要返回一个值(在本例中为 IEnumerator),而不是 lambda。

【讨论】:

  • 即在最后一行删除“() =>”。
【解决方案2】:

您必须在此处使用通用枚举。请参考以下链接。

EF6 Mocking derived DbSets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多