在" 我如何仅公开IList的片段<>问题"中,其中一个答案包含以下代码段:
IEnumerable<object> FilteredList()
{
foreach(object item in FullList)
{
if(IsItemInPartialList(item))
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
yield关键字有什么作用?我已经看到它在几个地方被引用,另外一个问题,但我还没弄清楚它实际上做了什么.我习惯于在一个线程产生另一个线程的意义上考虑收益率,但这似乎并不重要.
鉴于此代码:
IEnumerable<object> FilteredList()
{
foreach( object item in FullList )
{
if( IsItemInPartialList( item ) )
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我不应该这样编码呢?:
IEnumerable<object> FilteredList()
{
var list = new List<object>();
foreach( object item in FullList )
{
if( IsItemInPartialList( item ) )
list.Add(item);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
我理解yield
关键字的作用.它告诉编译器构建某种东西(迭代器).但为什么要用呢?除了代码略少之外,它对我有什么影响?
我知道是什么yield
,我看过几个例子,但我想不到现实生活中的应用,你用它来解决一些具体问题吗?
(理想情况下,某些其他问题无法解决的问题)