【发布时间】:2017-09-08 22:10:17
【问题描述】:
我在工作中维护一些代码,原作者已经不在了,所以想在这里问一下,看看能不能满足我的好奇心。
下面是一些使用 yield 的代码(匿名)。据我所知,它并没有增加任何好处,只返回一个列表就足够了,也许也更具可读性(至少对我来说)。只是想知道我是否遗漏了什么,因为这种模式在代码库的几个地方重复。
public virtual IEnumerable<string> ValidProductTypes
{
get
{
yield return ProductTypes.Type1;
yield return ProductTypes.Type2;
yield return ProductTypes.Type3;
}
}
此属性用作某些类的参数,该类仅使用它来填充集合:
var productManager = new ProductManager(ValidProductTypes);
public ProductManager(IEnumerable<string> validProductTypes)
{
var myFilteredList = GetFilteredTypes(validProductTypes);
}
public ObservableCollection<ValidType> GetFilteredTypes(IEnumerable<string> validProductTypes)
{
var filteredList = validProductTypes
.Where(type => TypeIsValid); //TypeIsValid returns a ValidType
return new ObservableCollection<ValidType>(filteredList);
}
【问题讨论】:
-
一个好处可能是,虽然在这种情况下似乎不是这样,但当枚举未完成时,例如使用 FirstOrDefault,并非所有潜在的代价高昂的执行都会在以后执行产量,这将是一个列表。在这种情况下,如果 Type2 是重属性,但枚举不消耗它,它会比列表轻。
-
恕我直言,这种情况最好用一个简单的数组来实现。我不觉得迭代器方法语法增加了任何东西。但这主要是一个意见问题。您似乎没有任何实际的、实用的编程问题要在这里解决。
标签: c# yield-return