рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реА # рдореЗрдВ
рдлреЙрд░реНрдЪреНрдпреВрдк рд▓реВрдк рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ: "рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдлреЙрд░реНрдЪреНрдпреВрдирд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?" рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдПрдХ рд╕рд╣рдЬ рдЬрд╡рд╛рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ: "рд╡рд░реНрдЧ
IEnumerable рдпрд╛
IEnumerable < T > " рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред
рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдкреВрд░реНрдг рдЙрддреНрддрд░ рд╣реИ: "
рдлреЙрд░рдХрдЪ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ
рдЧреЗрдЯрдиреЗрдорд░ () рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
MoveNext () рд╡рд┐рдзрд┐ рдФрд░
рд╡рд░реНрддрдорд╛рди рдЧреБрдг рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо
IEnumerable рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред рдФрд░
IEnumerable < T > "ред
рдЗрд╕ "рдмрддрдЦ" рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВред
рдЖрдЗрдП C # 1.0 рдХреЗ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ, рдЬрдм рднрд╛рд╖рд╛ рд╕рд░рд▓ рдФрд░ рд╕реАрдзреА рдереА, рдФрд░ рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ, LINQ рдФрд░ рдЕрдиреНрдп рдХреНрд▓реЛрдЬрд░ рдирд╣реАрдВ рдереЗред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП "рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг" рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░
рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЙрдирдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпреЗ рд╡рд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ
рдЖрдИрдПрдирдиреБрдореЗрд░реЗрдмрд▓ рдФрд░
рдЖрдИрдпреВрдордирд░реЗрдЯрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдереАрдВ, рдЬрдмрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рдиреЗ
рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ
рд╡рд╕реНрддреБ рд▓реМрдЯрд╛ рджреАред рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ
IEnumerator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЬреЛрд░рджрд╛рд░ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рддрддреНрд╡реЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЗрд╕ рдорд╛рди рдХреЛ рдкреИрдХрд┐рдВрдЧ рдФрд░ рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдПрдиреНрдпреВрдорд░реЗрдЯрд┐рдВрдЧ рддрддреНрд╡реЛрдВ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдУрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдереЛрдбрд╝рд╛ рд╕реНрдХреЛрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдЧ
IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд
GetEnumerator () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА
рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░
рд▓реМрдЯрд╛рддреА рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ
рдбреЗрдЯрдЯрд╛рдЗрдо ред
рд▓рдЧрднрдЧред рд╣рдордиреЗ рдбрд╛рдпрдирд╛рд╕реЛрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдВрдЧрди рдореЗрдВ, рдЕрднреА рднреА рдкрддреНрдерд░ рдХреА рдЙрдореНрд░ рдирд╣реАрдВ рд╣реИ, рдХреЙрдо рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдУрдХ рджрд┐рдпрд╛ рд╣реИ, рдбреЙрди рдмреЙрдХреНрд╕ рдЕрдм рдХрд┐рддрд╛рдмреЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЧреАрдХреНрд╕ рд╣рдорд╛рд░реЗ рджрд░рд╡рд╛рдЬреЗ рдкрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдлрдЯрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЕрдм рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рд╣реИ?
рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
IEnumerable < T > рдФрд░
IEnumerator < T > рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж, рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЯреНрд░рд┐рдХ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐
рд╕реВрдЪреА < рдЯреА > , рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ (рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреА рддрд░рд╣)
IEnumerable < T > рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рд╡рд┐рд╕реНрдлреЛрдЯрдХ рд░реВрдк рд╕реЗ) рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд
рдЧреЗрдЯрдиреНрдпреВрдорд░ () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред :
рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИред
GetEnumerator () рд╡рд┐рдзрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рд╕рдм рдХреЗ рдмрд╛рдж, рдкреБрдирд░рд╛рд╡реГрддреНрдд рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП "рд╕реВрдЪрдХ" рд╣реЛрддрд╛ рд╣реИ)ред рдФрд░ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░, рдХрдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░, .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкреИрд░ рдХреЛ рдЕрдкрдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдиреЛрдЯрд╣рд╛рдБ, рд╣рд╛рдБред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд░
рдЧрдгрдХ рдФрд░
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рдиреЛрдВ рдХреЛ
рдЧреБрд▓рдЬрд╛рд░ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд╣рди рдХрд░реЗрдВ :)
рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐
рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдХреА "рдмрддрдЦ" рдкреНрд░рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдвреЗрд░ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ:
var list = new List<int> {1, 2, 3};
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "рдмрддреНрддрдЦ" рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг,
рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ
GetEnumerator () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдвреЗрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреИрдХ рдкрд░ рдЪреБрдкрдЪрд╛рдк рдЬреАрд╡рд┐рдд рд░рд╣реЗрдЧрд╛ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЪрд░
рд╕реВрдЪреА рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреИрдХреЗрдЬрд┐рдВрдЧред рд╣рд╛рдВ, C # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░ рдХрдИ рдЕрдиреНрдп рдУрдУрдкреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд░рдЦрд╛ рд╣реИред
var рд╕реВрдЪреА = рдирдИ рд╕реВрдЪреА {1, 2, 3};
var x1 = new { Items = ((IEnumerable<int>)list).GetEnumerator() }; while (x1.Items.MoveNext()) { Console.WriteLine(x1.Items.Current); } Console.ReadLine(); var x2 = new { Items = list.GetEnumerator() }; while (x2.Items.MoveNext()) { Console.WriteLine(x2.Items.Current); }
рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛
рд▓реВрдк рдЕрдкреЗрдХреНрд╖рд┐рдд 1, 2, 3 рдФрд░ рджреВрд╕рд░рд╛
рдЬрдмрдХрд┐ рд▓реВрдк рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ ... рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди (рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛) рд╕реВрдХреНрд╖реНрдо рдЕрдиреБрдХреВрд▓рди рдкрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐
рдлреЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдХреЛ рдШреЛрдВрд╕рд▓реЗ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, BCL рдЯреАрдо рдиреЗ рдХреБрдЫ рдЧрдВрднреАрд░ рд╢реЛрдз рдХрд┐рдП рдЬрд┐рд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдерд╛ред
рдиреЛрдЯрдмрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдпрд╛ рдЕрдиреНрдп рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рддреБрд░рдВрдд рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╣реИ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЧрдВрднреАрд░ рдирд┐рд░реНрдгрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрди рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдмрд▓рд┐рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдПрдХ рдЫреЛрдЯрд╛ рдЬреЛрдбрд╝: рдбрд┐рд╕реНрдкреЛрдЬрд▓ рдХреЙрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреНрдпрд╛ рд╣реИ ?
рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА
рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдлрд╝реЙрд░рдЪ
рд▓реВрдк рдореЗрдВ
рд╕реВрдЪреА рдЪрд░ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрддреА рд╣реИ:
{ var enumerator = list.GetEnumerator(); try { while(enumerator.MoveNext()) { int current = enumerator.Current; Console.WriteLine(current); } } finally { enumerator.Dispose(); } }
рдПрдХ рд╡рд╛рдЬрд┐рдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНтАНрддрд┐ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВ? рдареАрдХ рд╣реИ, рд╣рд╛рдВ, рдЬрдм рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕реА # рдореЗрдВ рдкреНрд░рдЧрдгрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдХреЛрдИ рднреА рд╣рдореЗрдВ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрди рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
public static class FileEx { public static IEnumerable<string> ReadByLine(string path) { if (path == null) throw new ArgumentNullException("path"); return ReadByLineImpl(path); } private static IEnumerable<string> ReadByLineImpl(string path) { using (var sr = new StreamReader(path)) { string s; while ((s = sr.ReadLine()) != null) yield return s; } } } foreach(var line in FileEx.ReadByLine("D:\\1.txt")) { Console.WriteLine(line); }
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕
рд░реАрдбрдмрд╛рдЗрди рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдФрд░ рдХрдм рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ ... рдХрдм? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рд░ рдмрд╛рд░
ReadByLineImpl рд╡рд┐рдзрд┐
рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рдЫреЛрдбрд╝рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдореИрдВ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдмрд╛рд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬрдм рдЗрдЯреНрд░реЗрдЯрд░ рдХреА
рдбрд┐рд╕реНрдкреЛрдЬрд╝ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐
рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХреЗ
рдЕрдВрдд рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЙрди рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрдм
рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реИрдВрдбрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдХреБрдЫ рдЕрдиреБрдХреНрд░рдо рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдореЗрдВ рдЕрднреА рднреА рд╕рдВрд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
рдЗрдЯреНрд░реЗрдЯрд░ рдХреА
рдбрд┐рд╕реНрдкреЛрдЬ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдиреЛрдЯрдЖрдк рдПрдХ рдиреЛрдЯ рдореЗрдВ C # рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ... C # рдореЗрдВ
IteratorsредZY рдФрд░ рдЬреЛ рддреБрд░рдВрдд рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реИ: рдореБрдЭреЗ
рд░реАрдбрдмрд╛рдЗрди рдФрд░
рд░реАрдбрдмрд╛рдЗрдирдЗрдореНрдкреНрд▓ , рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ?
ZYY рд╡реИрд╕реЗ,
foreach block C # рдореЗрдВ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдФрд░ рдХрд┐рддрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?