【问题标题】:Can I call a yield return method outside of a loop? [closed]我可以在循环外调用 yield return 方法吗? [关闭]
【发布时间】:2013-06-06 16:05:40
【问题描述】:

在某些情况下,方法应该与 yield return 一起使用,而在其他情况下则不可用。

问题是,如果使用带yield return的方法给变量赋值,只会返回一项。

在这种情况下,将需要两种方法,一种用于常规使用,另一种用于收益返回。

有没有办法在循环外使用带有yield return的方法?

【问题讨论】:

  • 我不确定我是否理解这个问题,但我没有看到任何yield return 必不可少的情况。总有另一种解决方案。
  • 也许您可以添加一些可能的代码/用法来描述您想要的内容(即使由于明显的原因它不能完全编译)
  • 你的问题不清楚。
  • 这个问题我无法回答。
  • 我正在阐述一个例子。

标签: c# yield-return


【解决方案1】:

你的意思是你可以在循环之外使用yield return吗?

答案是肯定的:

IEnumerable<string> GetStrings()
{
    yield return "foo";
    yield return "bar";
    yield return "baz";
}

...但这将是yield return 的不寻常用例。

【讨论】:

  • 不一定。我已经多次将该模式用于简单的配置属性/方法,其中 then 集合的成员是事先已知的。
  • 不寻常但并非闻所未闻。我在返回IEnumerable 的方法是多态的并且某些具体物返回一组固定的项目的情况下使用它。除了循环之外,您还可以使用它(附加或前置固定项目)。
  • 我在做 mvc 自定义模型验证时一直使用 yield return。每个 yield 都在 if 语句中检查条件是否有效,并返回一个错误以添加到错误集合中
  • 我觉得这个具体用法很不寻常,因为你也可以写return new[] { "foo", "bar", "baz" };
  • @svick 提到的代码简化了真正的逻辑。正如安德烈多次评论的那样,您希望进行结果聚合,其中结果是条件/计算的,您将无法使用 return new[] { "foo", "bar", "baz" };所以这个模式还是比较方便的。
【解决方案2】:

使用yield return 的方法将返回IEnumerable,并且可能返回更具体的内容,例如IEnumerable&lt;int&gt;。如果您只对第一项感兴趣,可以致电:

int myInt = myYieldReturnMethod().First();

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 2011-02-08
    • 2022-12-11
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多