рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЙрд░реНрдл рдЖрд░рдПрдХреНрд╕ - рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рди) рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ рд╣реИ
ред рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ , рдЬреЛ рдЖрдкрдХреЛ рд╕рд░рд▓ рдЕрд╡рд▓реЛрдХрди рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
IObservable<string> xs = Observable.Generate<int, string>( initialState: 0,
рдиреЛрдЯ
рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг (рдЖрдЦрд┐рд░рдХрд╛рд░, рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЪреБрдкрдЪрд╛рдк рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣ рд╣реИ рдХрд┐ рд╕реА # рднрд╛рд╖рд╛ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдПрдХ рдЬреНрдЮрд╛рдд рдмрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╛рдорд╛рдВрдХрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдпрд╛ рдХрдиреЗрдХреНрдЯ-рдИ рдкрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рд╛рдВ, рд╡реИрд╕реЗ, рдпрд╣ рдмрд╛рдд рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 11 рдореЗрдВ рддрдп рдХреА рдЧрдИ рдереАредрдЬреЗрдирд░реЗрдЯ рд╡рд┐рдзрд┐ рд▓реВрдк рдХреЗ
рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕реЗ рдорд┐рд▓рддреА-рдЬреБрд▓рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╛рди рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп, рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд▓реВрдк рдЪрд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдПред рдФрд░ рдЕрдЧрд░ рд╣рдо рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрдЯрд░реЗрдЯрд░ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
static IEnumerable<string> GenerateSequence() { for ( int x = 0; //initialState x < 10; // condition x = x + 1 // iterate ) { yield return x.ToString(); // resultSelector } } static void Main(string[] args) { var xs = GenerateSequence(); foreach (var x in xs) Console.WriteLine("x: {0}", x); }
рдХреЛрдб рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорддреБрд▓реНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ
рдкреБрд╢ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ
IObservable рдХреЗ рд░реВрдк рдореЗрдВ), рдЬреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирдП рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдЧрдорди рдХреА рд╕реВрдЪрдирд╛ рджреЗрдЧрд╛, рддреЛ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ
рдкреБрд▓ рдЕрдиреБрдХреНрд░рдо рдорд┐рд▓рддрд╛ рд╣реИ (
рдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ
IEnumerable рдХреЗ рд░реВрдк рдореЗрдВ); рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдкрдХреЛ рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ "рд╕рд░реМрддрд╛" рд╕реЗ "рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛" рдЪрд╛рд╣рд┐рдПред
рдиреЛрдЯ
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдкреБрд▓ рдореЙрдбрд▓ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдПрдХ рдРрд╕рд╛ рдореЙрдбрд▓ рд╣реИ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдореБрдЦ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рд╣реИ рдЬреЛ рдЕрдЧрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП MoveNext рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рддрддреНрд╡ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреБрд╢ рдореЙрдбрд▓ рдореЗрдВ, рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИрдВ: рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрд╡рдпрдВ рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдП рдбреЗрдЯрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐) рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрд╡реЗрджрди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрди рдореЙрдбрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, IEnumerable / IObservable рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рджреНрд╡рдВрджреНрд╡рд╡рд╛рдж , рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди редрдЪреВрдВрдХрд┐ рдкреБрд╢ рдФрд░ рдкреБрд▓ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ (
рдЯреА рдХреЗ рдЖрдИрдУрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдФрд░ рдХреНрд░рдорд╢рдГ
рдЯреА рдХреЗ рдЖрдИрдиреБрдореЗрд░реЗрдмрд▓ ) рд╕рдорд╛рди рд╣реИрдВ, рдЕрдиреБрдХреНрд░рдо рдХреЗ рдПрдХ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд┐рд░ рдкрд░ рдЖ рд╕рдХрддрд╛ рд╣реИ:
int[] ai = new[] {1, 2, 3}; IObservable<int> oi = Observable.Generate( ai.GetEnumerator(), e => e.MoveNext(), e => e, e => (int)e.Current ); oi.Subscribe(i => Console.WriteLine("i: {0}", i));
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдЖрдкрд░рд╛рдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ:
1
2
3
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
List<int> li = new List<int> {1, 2, 3}; IObservable<int> oi = Observable.Generate( li.GetEnumerator(), e => e.MoveNext(), e => e, e => (int)e.Current ); oi.Subscribe(i => Console.WriteLine("i: {0}", i));
рдФрд░, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ ... рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рдЕрдирдВрдд рдЕрдиреБрдХреНрд░рдоред
рдиреЛрдЯ
рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред ToObservable , рдЬреЛ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ "рд╡рд┐рд╕реНрддрд╛рд░" рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдпрд╛ рддреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдореЗрдВ рдЬрдирд░реЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐
рдЯреА рд╡рд░реНрдЧ рдХреА
рд╕реВрдЪреА (рд╕рд╛рде рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдмреАрд╕реАрдПрд▓ рд╕рдВрдЧреНрд░рд╣) рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡рд░реНрдЧред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдиреНрдпреБрдорд░реЗрдЯрд░ рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд░рдг рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рдЙрд╕ рдореВрд▓ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рдЬреЛ рд╣рдо
рдЬреЗрдирд░реЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рд╣реБрдП рд╣реИрдВред
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмреБрд░рд╛рдИ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдПрдиреНрдпреВрдорд░реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдиреЗ рдмреАрд╕реАрдПрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рди рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВред рдЪреВрдБрдХрд┐ C # 2.0 рдореЗрдВ рдкреНрд░рдЧрдгрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдПрдХ рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдХрд┐ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░реЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдкреНрд░рд╡рд░реНрддрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдиреЛрдЯ
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрд╕ рдкрд░ рд╡рд┐рд╡рд░рдг рд╕рд╛рд╢рд╛ рдЧреЛрд▓реНрдбреНрд╕рдЯреАрди рдХреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд╕рд╛рде рд╣реА рдПрд░рд┐рдХ рд▓рд┐рдкрд░реНрдЯ рдХреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЬрд╡рд╛рдм рднреА ред рдкрд░рд╕реНрдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ: рдкрд░рд╕реНрдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЦрддрд░реЛрдВ рдкрд░ редрдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬреЛ рдЗрд╕рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рдмрдВрдзрд┐рдд рд╣реАрдк рдореЗрдВ рд╕реНрдерд┐рдд "рд╕рд╛рдорд╛рдиреНрдп" рдЪрд░ рдХрд╛ рд╕рдВрд╢реЛрдзрди рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдХреЙрдкреА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП:
IObservable<int> oi = Observable.Generate( (IEnumerator<int>)li.GetEnumerator(), e => e.MoveNext(), e => e, e => (int)e.Current );