рдХреЛрдб рдЬреАрд╡рд┐рдд рдФрд░ рдореГрдд рд╣реИред рднрд╛рдЧ рддреАрди рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб

рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рд╛рде рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рд╣реА рдпрд╣ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ - рдлрд┐рд░ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдкрд┐рдЫрд▓реЗ рджреЛ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдзреНрдпрд╛рди рд╕реЗ рдЪрдпрдирд┐рдд рд╢рдмреНрдж рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рджреЛ рд░реВрдкреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ: рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдФрд░ рдПрдХ рд╡рд╛рдХреНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВред рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ Thread.CurrentThread рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддрдм рддрдХ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ Thread.CurrentThread рдЕрднреА рддрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдиреЛрдЯреНрд╕ рдФрд░ рд╕рд░рд▓ рдзреБрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд, рдЕрдм рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрдЧреАрдд рдХреНрдпрд╛ рд╣реИред


рд╕рд╛рдордЧреНрд░реА рдХреА рдЪрдХреНрд░ рддрд╛рд▓рд┐рдХрд╛


  1. рд╡рд╕реНрддреБрдПрдВ
  2. рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЧреБрдг
  3. рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб

рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб


рдЕрдзрд┐рдХрд╛рдВрд╢ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд╣рд░реА рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИрдВред рдмреЗрд╢рдХ, рдореБрдлреНрдд рдореЗрдВ рдирд╣реАрдВ: рд╕рд╛рдордЧреНрд░реА рдПрдХ рдЕрд░реНрде рдореЗрдВ рдХрдордЬреЛрд░ рд╣реИред рддреЛ, рдЪрд▓рд┐рдП FluentAssertions рд╣реИрдВ, FluentAssertions рдкреИрдХреЗрдЬ рдореЗрдВ FluentAssertions рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: (2 + 2).Should().Be(4, because: "2 + 2 is 4!") , рдФрд░, рдкрдврд╝рдиреЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖, because рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Be() рдЕрдВрджрд░ Be() рдмрд▓реНрдХрд┐, error рдпрд╛ error ред рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ errorMessage ред


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдРрд╕реА рдЫреВрдЯ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред рдЬрдм рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдПрдХ рдкрд╛рда рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдШрдЯрдХ рд╕реНрд╡рдпрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ: рд╡реЗ рдЕрдм рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ "рдИрдерд░" рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ ред


рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреИрд╕реЗ рдЕрдиреБрднрд╡ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред


Interlocked


рдореИрдВ рдЖрдкрдХреЛ Interlocked рдорд╛рдорд▓реЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ Interlocked.CompareExchange(ref x, newX, oldX) рд╕реЗ Interlocked.CompareExchange(ref x, newX, oldX) Atomically.Change(ref x, from: oldX, to: newX) рдореЗрдВ рддрд░реАрдХреЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рд╣реИред


ExceptWith


рдЯрд╛рдЗрдк ISet<> рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕реЗ ExceptWith рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк items.ExceptWith(other) рддрд░рд╣ рдПрдХ рдХреЙрд▓ рдХреЛ items.ExceptWith(other) рд╣реИрдВред items.ExceptWith(other) , рдЖрдкрдХреЛ рддреБрд░рдВрдд рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдмрд╕ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: items.Exclude(other) , рдЬреИрд╕рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЖрддрд╛ рд╣реИред


GetValueOrDefault


Nullable<T> рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ Nullable<T> x.Value рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж null рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ x null ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА Value рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ x.GetValueOrDefault рдЙрдкрдпреЛрдЧ x.GetValueOrDefault : рдпрд╣ рдпрд╛ рддреЛ Value рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИред рдмреЛрдЭрд┐рд▓ред


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдпрд╛ x, рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди" рд▓рдШреБ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг x.OrDefault рдореЗрд▓ рдЦрд╛рддреА рд╣реИред


 int? x = null; var a = x.GetValueOrDefault(); // ,  .  . var b = x.OrDefault(); //  тАФ  ,   . var c = x.Or(10); //     . 

OrDefault рд╕рд╛рде рдФрд░ Or рдлрд┐рд░ рдПрдХ рдмрд╛рдд рдпрд╛рдж рд░рдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИ: рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп .? рдЖрдк x?.IsEnabled.Or(false) рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред


рдЬрдм IEnumerable<T> рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 IEnumerable<int> numbers = null; // . var x = numbers ?? Enumerable.Empty<int>(); //   . var x = numbers.OrEmpty(); 

Math.Min рдФрд░ Math.Max


Or рд╕рд╛рде рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк a рдФрд░ b рд╕реЗ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ: Math.Max(a, b) рдпрд╛ a > b ? a : b a > b ? a : b ред рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддреЗ рд╣реИрдВред


рдЖрдк рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ: a.Or(b).IfLess() - a рдпрд╛ b рдпрджрд┐ рдХрдо a рддреЛ рд▓реЗ рд▓реЛ ред рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд:


 Creature creature = ...; int damage = ...; //   . creature.Health = Math.Max(creature.Health - damage, 0); // Fluent. creature.Health = (creature.Health - damage).Or(0).IfGreater(); //   : creature.Health = (creature.Health - damage).ButNotLess(than: 0); 

string.Join


рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдпрд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░рдирд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, string.Join рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, string.Join(", ", new [] { 1, 2, 3 }); // "1, 2, 3". рдХрд░реЗрдВ, рдЬреИрд╕реЗ: string.Join(", ", new [] { 1, 2, 3 }); // "1, 2, 3". string.Join(", ", new [] { 1, 2, 3 }); // "1, 2, 3". ред


рдПрдХ рд╕рд╛рдзрд╛рд░рдг "рдХреЙрдорд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ" рдЕрдЪрд╛рдирдХ "рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирдВрдмрд░ рдкрд░ рдПрдХ рдХреЙрдорд╛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ " рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИред


 var numbers = new [] { 1, 2, 3 }; // ""    тАФ  . var x = string.Join(", ", numbers); //    тАФ ! var x = numbers.Separated(with: ", "); 

Regex


рд╣рд╛рд▓рд╛рдВрдХрд┐, string.Join рдХреЛ рдХрднреА-рдХрднреА рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдФрд░ рдЕрдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ string.Join рдХрд╛рдлреА рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реИред рдЬрд╣рд╛рдВ рдЖрдк рд╕рд░рд▓, рдкрдардиреАрдп рдкрд╛рда рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдХ рдЕрддрд┐рд╡реНрдпрд╛рдкреНрдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд╕рдВрдж рдХреА рдЬрд╛рддреА рд╣реИред


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ:


 string id = ...; // ,  . var x = Regex.IsMatch(id, "^[0-9]*$"); // . var x = id.All(x => x.IsDigit()); // ! var x = id.IsNumer(); 

рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрдг рд╣реИ:


 string text = ...; //   . var x = Regex.IsMatch(text, @"["<>[]'"); //   . ( .) var x = text.ContainsAnyOf('"', '<', '>', '[', ']', '\''); //  . var x = text.ContainsAny(charOf: @"["<>[]'"); 

рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп, рдЙрддрдирд╛ рд╣реА рдХрдард┐рди рд╕рдорд╛рдзрд╛рди "рдкреИрдЯрд░реНрди": "Hello World" "HelloWorld" рд░рд┐рдХреЙрд░реНрдб рдХреЛ "Hello World" рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрдЬрд╛рдп рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдЪрд╛рд╣рддрд╛ рдерд╛:


 string text = ...; //   -   . var x = Regex.Replace(text, "([az](?=[AZ])|[AZ](?=[AZ][az]))", "$1 "); //  . var x = text.PascalCaseWords().Separated(with: " "); //   . var x = text.AsWords(eachStartsWith: x => x.IsUpper()).Separated(with: " "); 

рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рднрд╛рд╡реА рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкрд╣рд▓реА рдирдЬрд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред


Substring Remove рдФрд░ Remove


рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рд╕реЗ рд▓рд╛рдЗрди рд╕реЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, path - рд╡рд┐рд╕реНрддрд╛рд░ .txt , рдпрджрд┐ рдХреЛрдИ рд╣реЛред


 string path = ...; //    . var x = path.EndsWith(".txt") ? path.Remove(path.Length - "txt".Length) : path; //   . var x = path.Without(".exe").AtEnd; 

рдлрд┐рд░ рд╕реЗ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪрд▓реЗ рдЧрдП рдереЗ , рдФрд░ рдЕрдВрдд рдореЗрдВ .exe рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд░рд▓ рд░реЗрдЦрд╛ рдЫреЛрдбрд╝ рджреА рдЧрдИ рдереА ред


рдЪреВрдБрдХрд┐ Without рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд WithoutExpression рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рднреАрдЦ рдорд╛рдБрдЧрддреЗ рд╣реИрдВ: path.Without("_").AtStart рдФрд░ path.Without("Something").Anywhere ред рдпрд╣ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: name.Without(charAt: 1) - рд╕реВрдЪрдХрд╛рдВрдХ 1 рдкрд░ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдИ рд▓рд╛рдЗрди рджреЗрддрд╛ рд╣реИ (рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧреА)ред рдФрд░ рдкрдардиреАрдп рднреА!


Type.GetMethods


рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 Type type = ...; //   `Get` ,   `|`.     . var x = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); // ,  . `Or`   , . var x = type.Methods(_ => _.Instance.Public.Or.NonPublic); 

(рд╡рд╣реА GetFields рдФрд░ GetFields рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред)


Directory.Copy


рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЕрдХреНрд╕рд░ DirectoryUtils , FileSystemHelper рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╛рдИрдкрд╛рд╕, рд╕рдлрд╛рдИ, рдирдХрд▓ рдЖрджрд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рдмреЗрд╣рддрд░ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ!


"рдбреА: \ рд╕реНрд░реЛрдд 'рд╕реЗ' рдбреА: \ рд▓рдХреНрд╖реНрдп 'рддрдХ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ "D:\\Source".AsDirectory().Copy().Files.To("D:\\Target") рдХреЛрдб "D:\\Source".AsDirectory().Copy().Files.To("D:\\Target") ред AsDirectory() - string рд╕реЗ DirectoryInfo рджреЗрддрд╛ рд╣реИ, рдФрд░ Copy() - CopyExpression рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп API рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ (рдЖрдк Copy().Files.Files рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Copy().Files.Files рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Copy().Files.Files )ред рдлрд┐рд░ рдЕрд╡рд╕рд░ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ: Copy().Files.Where(x => x.IsNotEmpty) ред


GetOrderById


рджреВрд╕рд░реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдХрд┐ IUsersRepository.GetUser(int id) рдмреЗрдорд╛рдиреА рд╣реИ, рдФрд░ рдмреЗрд╣рддрд░ рд╣реИ, IUsersRepository.User(int id) ред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рд╕рдорд╛рди IOrdersRepository рд╣рдорд╛рд░реЗ рдкрд╛рд╕ GetOrderById(int id) , рд▓реЗрдХрд┐рди Order(int id) ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдРрд╕реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ _ordersRepository рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ _orders рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рджреЛрдиреЛрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╕рд╛рде рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: рдХреЙрд▓рд┐рдВрдЧ _orders.Order(id) рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ _orders.Get(id) , рд▓реЗрдХрд┐рди рдЖрджреЗрд╢ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ ред рдПрдХ рд╣реИ рдХрд┐ One , рдЗрд╕рд▓рд┐рдП:


 IOrdersRepository orders = ...; int id = ...; //   . var x = orders.GetOrderById(id); //      : var x = orders.Order(id); //     ,    . var x = orders.One(id); //    : var x = orders.One(with: id); 

GetOrders


IOrdersRepository рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ, рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдХреНрд╕рд░ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ: AddOrder , RemoveOrder , GetOrders ред рдкрд╣рд▓реЗ рджреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдЪрд▓реА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ Add рдФрд░ Remove рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдЗрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде _orders.Add(order) рдФрд░ _orders.Remove(order) )ред GetOrders рд╕рд╛рде GetOrders Orders рдереЛрдбрд╝рд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдХрдард┐рди рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ:


 IOrdersRepository orders = ...; //   . var x = orders.GetOrders(); //  `Get`,  . var x = orders.Orders(); // ! var x = orders.All(); 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреБрд░рд╛рдиреЗ _ordersRepository GetOrders рдпрд╛ GetOrderById рдХреЙрд▓ рдореЗрдВ repetitions рдЗрддрдиреЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ!


One рдЬреИрд╕реЗ рдирд╛рдо, All рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдЬреЛ рдХрдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдХрд╣реЛ, GitHub API рдХреЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ - octokit - рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ gitHub.Repository.GetAllForUser("John") рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ - gitHub.Users.One("John").Repositories.All ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХреНрд░рдорд╢рдГ gitHub.Repository.Get("John", "Repo") рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ gitHub.Users.One("John").Repositories.One("Repo") ред рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рд▓рдВрдмрд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рд╣реИ рдФрд░ рдордВрдЪ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ gitHub.User("John").Repository("Repo") рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ gitHub.User("John").Repository("Repo") ред


Dictionary.TryGetValue


рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрдИ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рдХреЗ рди рд╣реЛрдиреЗ рдкрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ:


  • рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ ( dictionary[key] );
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ (рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ TryGetValue рдпрд╛ TryGetValue );
  • рдХреБрдЫ рдФрд░ рд▓реМрдЯрд╛рдПрдВ (рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ GetValueOrOther рдЙрдореНрдореАрдж рд╣реИ);
  • рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ (рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди GetOrAdd рдХрд╛ GetOrAdd )ред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ " рдХреБрдЫ X, рдпрд╛ Y рд▓реЗрддреА рд╣реИрдВ рдпрджрд┐ X рдирд╣реАрдВ рд╣реИ ред" рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ _ordersRepository рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдбрд┐рдХреНрд╢рдирд░реА рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ items itemsDictionary рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ items itemsDictionary ред


рдлрд┐рд░ "рдХреБрдЫ рдПрдХреНрд╕" рднрд╛рдЧ рдХреЗ рд▓рд┐рдП , рдлреЙрд░реНрдо items.One(withKey: X) рдХрд╛ рдПрдХ рдХреЙрд▓ред рдПрдХ items.One(withKey: X) рдЖрджрд░реНрд╢ рд╣реИ, рдЪрд╛рд░ items.One(withKey: X) рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:


 Dictionary<int, Item> items = ...; int id = ...; //  ,   : var x = items.GetValueOrDefault(id); var x = items[id]; var x = items.GetOrAdd(id, () => new Item()); //    : var x = items.One(with: id).OrDefault(); var x = items.One(with: id).Or(Item.Empty); var x = items.One(with: id).OrThrow(withMessage: $"Couldn't find item with '{id}' id."); var x = items.One(with: id).OrNew(() => new Item()); 

Assembly.GetTypes


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ T рд╕рднреА рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:


 // . var x = Assembly .GetAssembly(typeof(T)) .GetTypes() .Where(...) .Select(Activator.CreateInstance); // "" . var x = TypesHelper.GetAllInstancesOf<T>(); // . var x = Instances.Of<T>(); 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрднреА-рдХрднреА, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рд╣реИ ред


рдХреБрдЫ рдРрд╕рд╛ рд╣реА NUnit рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Assert.That(2 + 2, Is.EqualTo(4)) - Is рдФрд░ рдПрдХ рдЖрддреНрдордирд┐рд░реНрднрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред


Argument.ThrowIfNull


рдЕрдм рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдкреВрд░реНрд╡рд╡рд░реНрддреА рдЬрд╛рдБрдЪ рдкрд░:


 //  . Argument.ThrowIfNull(x); Guard.CheckAgainstNull(x); // . x.Should().BeNotNull(); // ,  ...  ? Ensure(that: x).NotNull(); 

Ensure.NotNull(argument) - рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдЕрдВрдЧреНрд░реЗрдЬреА рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд Ensure(that: x).NotNull() рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдХреЗрд╡рд▓ рд╡рд╣рд╛рдБ ...


рд╡реИрд╕реЗ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рдо Contract.Ensure(that: argument).IsNotNull() рд▓рд┐рдЦрддреЗ рд╣реИрдВред Contract.Ensure(that: argument).IsNotNull() рдФрд░ using static Contract рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдЕрддрдГ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ Ensure(that: type).Implements<T>() , Ensure(that: number).InRange(from: 5, to: 10) , рдЖрджрд┐ Ensure(that: number).InRange(from: 5, to: 10) рд╣реЛрддреЗ рд╣реИрдВред


рд╕реНрдереИрддрд┐рдХ рдЖрдпрд╛рдд рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрдИ рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓рддрд╛ рд╣реИред items.Remove(x) рдмрдЬрд╛рдп: рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рдЙрджрд╛рд╣рд░рдгред items.Remove(x) Remove(x, from: items) рд▓рд┐рдЦреЗрдВред рд▓реЗрдХрд┐рди рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреА рдХрдореА рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред


 IItems items = ...; // . var x = items.All(where: x => x.IsWeapon); //  . // `ItemsThatAre.Weapons`  `Predicate<bool>`. var x = items.All(ItemsThatAre.Weapons); // `using static`  !  . var x = items.All(Weapons); 

рд╡рд┐рджреЗрд╢реА Find


C # 7.1 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдореЗрдВ, рдЖрдк Find(1, @in: items) , рдмрд▓реНрдХрд┐ Find(1, in items) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ Find рдХреЛ Find<T>(T item, in IEnumerable<T> items) рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рд╕рднреА рд╕рд╛рдзрди рдЕрдЪреНрдЫреЗ рд╣реИрдВред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдЙрди рд╕рднреА рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  • рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ Should().Be(4, because: "") , Atomically.Change(ref x, from: oldX, to: newX) ред
  • рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд░рд▓ рдирд╛рдо Separated(with: ", ") , Exclude ред
  • рдЪрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ x.OrDefault() , x.Or(b).IfLess() , orders.One(with: id) , orders.All ред
  • рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ path.Without(".exe").AtEnd ред
  • рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ Instances.Of , Is.EqualTo ред
  • рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ ( using static ) рдпрд╣ Ensure(that: x) , items.All(Weapons) ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрд╛рд╣реНрдп рдФрд░ рдЪрд┐рдВрддрди рдХреЛ рд╕рд╛рдордиреЗ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╕реЛрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡рддрд╛рд░реЛрдВ рдХреЛ рд╕реЛрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдб рдХреЛ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдиреНрдпрд╛рдпрд╛рдзреАрд╢ рдХреЛ рднрд╛рд╖рд╛ рдХрд╛ рдЙрддрдирд╛ рд╕реНрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ - рд╡рд╣ item.GetValueOrDefault рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред item.GetValueOrDefault рдФрд░ item.OrDefault ред


рдЙрдкрд╕рдВрд╣рд╛рд░


рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ? рдлрд░реНрдиреАрдЪрд░ рдФрд░ рдХрдорд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдмрд░реНрдл-рд╕рдлреЗрдж рдорд╣рд▓ рдпрд╛ рд▓реБрдИ XIV рдХреА рд╢реИрд▓реА рдореЗрдВ рд╕реЛрдлреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЗрдб? рдЗрдВрдЬрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд▓рдХреНрдЬрд░реА рдиреМрдХрд╛ рдпрд╛ рдПрдХ рдХреНрд╡рд╛рдВрдЯрдо рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд░рд╛рд╣рдирд╛ рдмрдЬрд░рд╛ рдЬреЛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?


рдзреНрд░реБрд╡реАрдп рдЙрддреНрддрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "рдХрд╣реАрдВ рдмреАрдЪ рдореЗрдВ" рднреАред


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рджреЛрдиреЛрдВ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдЕрдЯреВрдЯ рд╣реИрдВ: рдзреНрдпрд╛рди рд╕реЗ рдПрдХ рдХрд┐рддрд╛рдм рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╡рд░ рдЪреБрдирдирд╛, рд╣рдо рд╕рдВрджреЗрд╣ рд╕реЗ рдкрд╛рда рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдмреАрдЯрд▓реНрд╕ рдХрдо-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рд╕рдВрдЧреАрдд рдмрдЬрд╛рдПрдВ , рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рднреА MusicHelper рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред


рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░рдо рдирд┐рд░реНрдгрдп рдХреА рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЪрдХреНрд░ рд░реВрдк рдФрд░ рдЪрд┐рддреНрд░ рдХрд╛ рдЪрд░рдо рд╣реИред


рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!


рд╕рдВрджрд░реНрдн


рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдореЗрд░реЗ GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Pocket.Common рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВред (рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ)

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


All Articles