рдмрддреНрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдпрд╛ "рдкреНрд░рд╛рдЪреАрдирддрд╛ рдЗрддрдиреА рд╕рд░рд▓ рд╣реИ?"

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реА # рдореЗрдВ рдлреЙрд░реНрдЪреНрдпреВрдк рд▓реВрдк рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ: "рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдЪреНрдпреВрдирд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?" рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдПрдХ рд╕рд╣рдЬ рдЬрд╡рд╛рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ: "рд╡рд░реНрдЧ IEnumerable рдпрд╛ IEnumerable < T > " рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдареАрдХ рд╣реИ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред

рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдкреВрд░реНрдг рдЙрддреНрддрд░ рд╣реИ: " рдлреЙрд░рдХрдЪ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЧреЗрдЯрдиреЗрдорд░ () рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ MoveNext () рд╡рд┐рдзрд┐ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЧреБрдг рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо IEnumerable рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред рдФрд░ IEnumerable < T > "ред

рдЗрд╕ "рдмрддрдЦ" рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВред


рдЖрдЗрдП C # 1.0 рдХреЗ рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ, рдЬрдм рднрд╛рд╖рд╛ рд╕рд░рд▓ рдФрд░ рд╕реАрдзреА рдереА, рдФрд░ рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ, LINQ рдФрд░ рдЕрдиреНрдп рдХреНрд▓реЛрдЬрд░ рдирд╣реАрдВ рдереЗред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХреЛрдИ рдЬреЗрдирд░рд┐рдХ рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП "рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг" рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░ рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЙрдирдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпреЗ рд╡рд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдЖрдИрдПрдирдиреБрдореЗрд░реЗрдмрд▓ рдФрд░ рдЖрдИрдпреВрдордирд░реЗрдЯрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдереАрдВ, рдЬрдмрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рдиреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛ рджреАред рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ IEnumerator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЬреЛрд░рджрд╛рд░ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рддрддреНрд╡реЛрдВ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЗрд╕ рдорд╛рди рдХреЛ рдкреИрдХрд┐рдВрдЧ рдФрд░ рдЕрдирдкреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдПрдиреНрдпреВрдорд░реЗрдЯрд┐рдВрдЧ рддрддреНрд╡реЛрдВ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдУрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдереЛрдбрд╝рд╛ рд╕реНрдХреЛрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд░реНрдЧ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд GetEnumerator () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддреА рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рдбреЗрдЯрдЯрд╛рдЗрдо ред

рд▓рдЧрднрдЧред рд╣рдордиреЗ рдбрд╛рдпрдирд╛рд╕реЛрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдВрдЧрди рдореЗрдВ, рдЕрднреА рднреА рдкрддреНрдерд░ рдХреА рдЙрдореНрд░ рдирд╣реАрдВ рд╣реИ, рдХреЙрдо рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдУрдХ рджрд┐рдпрд╛ рд╣реИ, рдбреЙрди рдмреЙрдХреНрд╕ рдЕрдм рдХрд┐рддрд╛рдмреЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЧреАрдХреНрд╕ рд╣рдорд╛рд░реЗ рджрд░рд╡рд╛рдЬреЗ рдкрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдлрдЯрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЕрдм рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдХреЛрдИ рд▓рд╛рдн рд╣реИ?

рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ IEnumerable < T > рдФрд░ IEnumerator < T > рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рдж, рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЯреНрд░рд┐рдХ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реВрдЪреА < рдЯреА > , рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ (рдмреАрд╕реАрдПрд▓ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреА рддрд░рд╣) IEnumerable < T > рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рд╡рд┐рд╕реНрдлреЛрдЯрдХ рд░реВрдк рд╕реЗ) рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреЗрдЯрдиреНрдпреВрдорд░ () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред :

// ! public class List<T> : IEnumerable<T> { //   List<T> //  ,  !!! public struct Enumerator : IEnumerator<T>, IDisposable { } public List<T>.Enumerator GetEnumerator() { return new Enumerator(this); } //    IEnumerator<T> IEnumerator<T>.GetEnumerator() { return GetEnumerator(); } } 


рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИред GetEnumerator () рд╡рд┐рдзрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рд╕рдм рдХреЗ рдмрд╛рдж, рдкреБрдирд░рд╛рд╡реГрддреНрдд рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП "рд╕реВрдЪрдХ" рд╣реЛрддрд╛ рд╣реИ)ред рдФрд░ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░, рдХрдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░, .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдмрд╕реЗ рддреЗрдЬ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкреИрд░ рдХреЛ рдЕрдкрдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдиреЛрдЯ
рд╣рд╛рдБ, рд╣рд╛рдБред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЪрд░ рдЧрдгрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рдиреЛрдВ рдХреЛ рдЧреБрд▓рдЬрд╛рд░ рдХрд░ рдЪреБрдХрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд╣рди рдХрд░реЗрдВ :)

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝реЙрд░реЗрд╕реНрдЯ рд▓реВрдк рдХреА "рдмрддрдЦ" рдкреНрд░рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдвреЗрд░ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ:

 var list = new List<int> {1, 2, 3}; //  List<T>.Enumerator GetEnumerator foreach(var i in list) {} //  IEnumerable<T> GetEnumerator foreach(var i in (IEnumerable<int>)list) {} 


рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "рдмрддреНрддрдЦ" рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, рд▓рд┐рд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ 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 # рдореЗрдВ рдмрддрдЦ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдФрд░ рдХрд┐рддрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

Source: https://habr.com/ru/post/In148905/


All Articles