User Tools

Site Tools


yield

This is an old revision of the document!


yield permits to return a part of a result in a executing loop.

Please look at the following code that does not uses yield:

foreach cFile as string in GetFiles( "c:\" )
  WriteLine( cFile )
next

return
function GetFiles( cFolder as string ) as List<string>
local aFiles as string[]
local oFiles as List<string>

WriteLine( "start creating list" )	
oFiles := List<string>{}
aFiles := Directory.GetFiles( cFolder )
foreach cFile as string in aFiles
  oFiles:Add( cFile )
next
WriteLine( "end creating list" )	
	
return oFiles

As you would expect, this code shows the follwing output:

start creating list
end creating list
c:\bootmgr
c:\BOOTNXT
c:\bootTel.dat
c:\hiberfil.sys
c:\lang.txt
c:\pagefile.sys
c:\swapfile.sys

If you change the code to use yield, you need to change the type of your function - and your function cannot more have any return statement:

foreach cFile as string in GetFiles( "c:\" )
  WriteLine( cFile )
next

function GetFiles( cFolder as string ) as IEnumerable<string>
local aFiles as string[]
local oFiles as List<string>

WriteLine( "start creating list" )	
oFiles := List<string>{}
aFiles := Directory.GetFiles( cFolder )
foreach cFile as string in aFiles
  yield return cFile
next
WriteLine( "end creating list" )	

This code produces the following output:

start creating list
c:\bootmgr
c:\BOOTNXT
c:\bootTel.dat
c:\hiberfil.sys
c:\lang.txt
c:\pagefile.sys
c:\swapfile.sys
end creating list
yield.1524391822.txt.gz · Last modified: 2018/04/22 10:10 by wolfgangriedmann