我在工作中维护一些代码,原作者已离职,所以想在这里问一下,看看能否满足我的好奇心。
以下是一段代码(已匿名化),其中使用了 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);
}