使用 yield 关键字后如何转换

How to cast after using yield keyword

我想在 return 语句中使用 Yield 关键字,但在使用它之后我遇到了转换问题:

Cannot implicitly convert type 'IEnumerable - Mderator' to 'Moderator'. An explicit conversion exists (are you missing a cast?)

当我删除 Yield 关键字时,我没有错误,并且我不想使用 dynamic 作为类型 return。

这是我的方法:

        public IEnumerable<Moderator> GetAllModerators(int id)
    {
        RtcRepository repoRtc = new RtcRepository(db);
        yield return repoRtc.GetByID(id).Collection1.SelectMany(x => x.Collection2.Select(y => y.Moderator));
    }

您误解了 yield return 的用法。 yield return 用于从基本类型的多个连续 return 生成 IEnumerable。

例如:

for (int i = 0; i < 100; i++)
   yield return i;

将生成一个 IEnumerable。

这里你已经有了一个枚举,所以你根本不需要 yield。

在这种情况下您不需要 yield。试试这个

 public IEnumerable<Moderator> GetAllModerators(int id)
 {
        RtcRepository repoRtc = new RtcRepository(db);
      return repoRtc.GetByID(id).Collection1
     .SelectMany(x => x.Collection2.Select(y => y.Moderator)).FirstOrDefault();
  }