【发布时间】:2023-03-12 12:19:01
【问题描述】:
我在 C# 中有一个 get-only 属性,它返回 IEnumerable。如果该属性只会产生一次,那么我可以像这样定义我的属性:
public IEnumerable Derp {
get { yield return new SomeObject(); }
}
但是我将如何使用 C#6 表达式主体成员来执行此操作?以下方法不有效:
// These definitions do NOT work
public IEnumerable Derp => yield return new SomeObject();
public IEnumerable Derp => yield new SomeObject();
返回编译器错误 CS0103:“名称 'yield' 在当前上下文中不存在”。 yielding 表达式体成员在 C#6 中是否可能?在 C#7 中怎么样?
我知道只返回一次的 IEnumerable 成员看起来很臭,但我主要只是好奇。我在尝试使用 NUnit TestCaseSource API 时遇到了这种情况,试图提供一种只产生一个测试用例的方法。我还可以看到这与想要定义要使用 StartCoroutine() 调用的表达式主体方法的 Unity 开发人员有关。
无论如何,提前感谢您的想法!
【问题讨论】:
-
你为什么不能
Derp => new[] { new SomeObject() };?你真的不需要在这里使用yield
标签: c# ienumerable c#-6.0 yield-return c#-7.0