Runtime: .NET Core 3.0 -> .NET 5.0 рд╕реЗ string.IndexOf (string) рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЕрдХреНрддреВре░ 2020  ┬╖  76рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dotnet/runtime

рд╡рд┐рд╡рд░рдг

рдореИрдВ .NET 5.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:

using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var actual = "Detail of supported commands\n============\n## Documentation produced for DelegateDecompiler, version 0.28.0 on Thursday, 22 October 2020 16:03\n\r\nThis file documents what linq commands **DelegateDecompiler** supports when\r\nworking with [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/) (EF).\r\nEF has one of the best implementations for converting Linq `IQueryable<>` commands into database\r\naccess commands, in EF's case T-SQL. Therefore it is a good candidate for using in our tests.\r\n\r\nThis documentation was produced by compaired direct EF Linq queries against the same query implemented\r\nas a DelegateDecompiler's `Computed` properties. This produces a Supported/Not Supported flag\r\non each command type tested. Tests are groups and ordered to try and make finding things\r\neasier.\r\n\r\nSo, if you want to use DelegateDecompiler and are not sure whether the linq command\r\nyou want to use will work then clone this project and write your own tests.\r\n(See [How to add a test](HowToAddMoreTests.md) documentation on how to do this). \r\nIf there is a problem then please fork the repository and add your own tests. \r\nThat will make it much easier to diagnose your issue.\r\n\r\n*Note: The test suite has only recently been set up and has only a handful of tests at the moment.\r\nMore will appear as we move forward.*\r\n\r\n\r\n### Group: Unit Test Group\n#### [My Unit Test1](../TestGroup01UnitTestGroup/Test01MyUnitTest1):\n- Supported\n  * Good1 (line 1)\n  * Good2 (line 2)\n\r\n#### [My Unit Test2](../TestGroup01UnitTestGroup/Test01MyUnitTest2):\n- Supported\n  * Good1 (line 1)\n  * Good2 (line 2)\n\r\n\r\n\nThe End\n";

            var expected = "\n#### [My Unit Test2](";

            Console.WriteLine($"actual.Contains(expected): {actual.Contains(expected)}");
            Console.WriteLine($"actual.IndexOf(expected): {actual.IndexOf(expected)}");
        }
    }
}

рдореБрдЭреЗ .NET рдХреЛрд░ 3.0 -> .NET 5.0 рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

.NET рдХреЛрд░ 3.0:

actual.Contains(expected): True
actual.IndexOf(expected): 1475

.NET 5.0:

actual.Contains(expected): True
actual.IndexOf(expected): -1

рд╡рд┐рдиреНрдпрд╛рд╕

рд╡рд┐рдВрдбреЛрдЬ 10 рдкреНрд░реЛ рдмрд┐рд▓реНрдб 19041 x64
.NET рдХреЛрд░ 3.1.9
.NET 5.0.0-rc.2.20475.5

рдкреНрд░рддрд┐рдЧрдорди?

рд╣рд╛рдБ, рдпрд╣ .NET рдХреЛрд░ 3.1.9 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

area-System.Globalization question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@tarekgh , рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ Contains рдФрд░ IndexOf рдмреАрдЪ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреНрд░рддрд┐ рдирд╣реАрдВ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ IndexOf рдЬреЛ рдХрд┐ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ ASCII- рдХреЗрд╡рд▓ рддрд╛рд░ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рд╕реНрдерд╛рдиреАрдп-рдирд┐рд░реНрднрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдерд╛!)ред

рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдп / рдПрдирдПрд▓рдПрд╕ / рдЖрдИрд╕реАрдпреВ-рд╕рдВрдмрдВрдзреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ / рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реИ, рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореБрдЭреЗ .NET 5 RC 2 рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗ рд░рд╣рд╛ рд╣реИ):

var actual = "\n\r\nTest";
var expected = "\nTest";

Console.WriteLine($"actual.IndexOf(expected): {actual.IndexOf(expected)}"); // => -1

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рднреА, рдХреНрдпреЛрдВ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛?

рд╣рд╛рдВ ICU рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрджрд▓рд╛рд╡ рд╣реИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдореИрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЬреИрд╕реЗ, .NET рдЯреАрдо рдХреЗ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рдмреИрдареЗ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА:

рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "\ n \ r \ nTest" рдореЗрдВ ICU рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде "\ nTest" рд╣реИ? рдирд╣реАрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ!

рдФрд░ рдХрд┐рд╕реА рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХреА? рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ!

рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБрдд рдЧрдВрднреАрд░ рдмрдЧ, рдПрдХ рдмрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдЕрд╡рд░реЛрдзрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдХрд╛рд░рдг, рдирдП рдФрд░ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП .NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдПрдВрдЧреЗ!

рдЖрдИрд╕реАрдпреВ рд╡реИрд╕реЗ рднреА рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдЕрдВрдд рд╣реИ?

PS рд╣рд╛рдБ, рдЖрдк рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдВрд╕реНрдХреГрддрд┐-рд╕реНрд╡рддрдВрддреНрд░ IndexOf рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдСрд░реНрдбрд┐рдирд▓ рдзреНрд╡рдЬред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ .NET 5 рдореЗрдВ рдЗрд╕реЗ _that_ рдХрдард┐рди рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ,

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐, IndexOf рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрд╕реНрдХреГрддрд┐-рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд╛рдЗрд▓реНрдб рдореЗрдВ рдХреЛрдб рдХреЗ _tons_ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЭрдВрдбреЗ рдХреЗ IndexOf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣ рдХреЛрдб _use to work_ (рдХреБрдЫ / рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо)ред рдФрд░ рдпрд╣ .NET 5 рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред

рд╕рднреА 76 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@tarekgh

рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░рдирд╛: @tarekgh , @safern , @krwq
рдпрджрд┐ рдЖрдк рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВред

рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИред .NET 5.0 рдореЗрдВ рд╣рдордиреЗ NLS рдХреЗ рдмрдЬрд╛рдп ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/globalization-icu рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП config рд╕реНрд╡рд┐рдЪ System.Globalization.UseNls рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ ICU рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдФрд░ ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ OS рдХреЗ рдкрд╛рд░ рд╕реНрдерд┐рд░рддрд╛ рджреЗрдЧрд╛ред

рдпрд╣ рдХрд╣рдирд╛ рднреВрд▓ рдЧрдпрд╛, рдпрджрд┐ рдЖрдк IndexOf Contains рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рд╕рдордп рд╕рд╛рдзрд╛рд░рдг рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

C# actual.IndexOf(expected, StringComparison.Ordinal)

рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП config switch System.Globalization.UseNls рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ ICU рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ рдФрд░ ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ OS рдХреЗ рдкрд╛рд░ рд╕реНрдерд┐рд░рддрд╛ рджреЗрдЧрд╛ред

рд╣рд╛рдБ, рдпрджрд┐ рдЖрдк рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ netcoreapp3.1 рд▓рдХреНрд╖реНрдп рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 santifdezm юВ░ DESKTOP-1J7TFMI юВ░ ~ юВ░ experimental юВ▒ indexof юВ░ $ юВ░  /home/santifdezm/experimental/indexof/bin/Debug/netcoreapp3.1/linux-x64/publish/indexof
actual.Contains(expected): True
actual.IndexOf(expected): -1

рдФрд░ @tarekgh рдХреЗ рд░реВрдк рдореЗрдВ Ordinal рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред

 santifdezm юВ░ DESKTOP-1J7TFMI юВ░ ~ юВ░ experimental юВ▒ indexof юВ░ $ юВ░ /home/santifdezm/experimental/indexof/bin/Debug/net5.0/linux-x64/publish/indexof
actual.Contains(expected): True
actual.IndexOf(expected): 1475

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ \r\n рдФрд░ \n рд╣реИред рдЕрдЧрд░ рдореИрдВ \r\n рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде \n рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рд╕рдм рдХреБрдЫ \r\n рдмрдирд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╕рдЪ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдорд┐рдХреНрд╕ рд╣реИ рдЬреЛ рдЖрдИрд╕реАрдпреВ рдХреА рддреБрд▓рдирд╛ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

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

https://twitter.com/jbogard/status/1319381273585061890?s=21

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдКрдкрд░ рдПрдХ рдЧрд▓рддрдлрд╣рдореА рдереАред

@GrabYourPitchforks рдХреНрдпрд╛ рд╣рдо рд╕рдорд╕реНрдпрд╛ рд╢реАрд░реНрд╖рдХ рдХреЛ рдлрд┐рд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдпреВрдирд┐рдХреНрд╕ рдкрд░ рд╣реЛрддрд╛ рд╣реИ ... рд╕рд╣реА рд╣реИ?

рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореА рдХреЛ рдСрдлрд▓рд╛рдЗрди рдкрд┐рдВрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЙрдирдХреА рдореВрд▓ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ред 280-char рдлрд╝реЛрд░рдо рдмрдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред ;)

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Contains API рдХреНрд░рдорд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИред IndexOf рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдЭрдВрдбреЗ рдХреЗ рднрд╛рд╖рд╛рдИ рд╕рдВрдЪрд╛рд▓рди рд╣реИ рдФрд░ рди рдХрд┐ рдХреНрд░рдорд┐рдХред рдпрджрд┐ IndexOf рдХреЗ рд╕рд╛рде Contains рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ IndexOf(expected, StringComparison.Ordinal) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ https://docs.microsoft.com/en-us/dotnet/csharp/how-to/compare-strings рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рд╣реИред

рдореБрдЭреЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд▓рд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реВрдк рдореЗрдВ IndexOf рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ 3.0 рдмрдирд╛рдо 5.0 рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдЕрдВрддрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред

@GrabYourPitchforks рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рдЙрддреНрддрд░реЛрдВ рдкрд░ https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/globalization-icu рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ config рд╕реНрд╡рд┐рдЪ рд╣реИ?

рдореБрдЭреЗ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдорд┐рд▓рд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд▓реВрдк рдореЗрдВ IndexOf рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ 3.0 рдмрдирд╛рдо 5.0 рд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рдЕрдВрддрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, @GrabYourPitchforks ... рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд, рдЗрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдВрдж рдХрд░рдирд╛ред

рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдирдПрд▓рдПрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

`` `рд╕реА #
CultureInfo.CurrentCulture.CompareInfo.IndexOf (рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдЕрдкреЗрдХреНрд╖рд┐рдд, рддреБрд▓рдирд╛рдПрдВ редgnoreSymbols)


or 

```C#
    actual.IndexOf(expected, StringComparison.Ordinal)

рдХреЗ рдмрдЬрд╛рдп

C# actual.IndexOf(expected)

рдФрд░ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд▓рд┐рдВрдХреНрдб ICU рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд▓реЗрдЦрди (https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/) рдореЗрдВ \r\n vs \n рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рднреВрдордВрдбрд▓реАрдХрд░рдг-рдЖрдИрд╕реАрдпреВ)ред

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛?

@ForNeVeR рдЖрдИрд╕реАрдпреВ рдФрд░ рдПрдирдПрд▓рдПрд╕ рдХреЗ рдмреАрдЪ рд╣рд░ рдПрдХ рдЕрдВрддрд░ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ ICU рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдареАрдХ рдирд╣реАрдВ рд╣реИ Contains рдХреЗ рд╕рд╛рде IndexOf StringComparison рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ IndexOf рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХреГрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛?

рд╣рд╛рдВ ICU рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрджрд▓рд╛рд╡ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдПрдирдПрд▓рдПрд╕ рдкрд░ ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдИрд╕реАрдпреВ рд╡реИрд╕реЗ рднреА рднрд╡рд┐рд╖реНрдп рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ICU рд╡рд┐рдВрдбреЛрдЬ / рд▓рд┐рдирдХреНрд╕ / OSX рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛ред рдпрджрд┐ рд╡реЗ рдЪрд╛рд╣реЗрдВ рддреЛ ICU рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдЙрдЪ, рд╕рдВрджрд░реНрднрд┐рдд рдбреЙрдХреНрдЯрд░ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЖрдИрд╕реАрдпреВ / рдПрдирдПрд▓рдПрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдЪреБрдкрдЪрд╛рдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ icu.dll рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрд╡рд┐рдЪ рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рднреА рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдкрд░ ICU рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ .NET рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╢рд┐рдк рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдЪреАрдЬреЛрдВ рдХреЛ рдордЬреЗрджрд╛рд░ рднреА рдмрдирд╛рддреА рд╣реИред

рдпрджрд┐ рд╕реНрд╡рд┐рдЪ рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рднреА рд▓рдХреНрд╖реНрдп рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдкрд░ ICU рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ .NET рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╢рд┐рдк рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛ред рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдирдЯрд╛рдЗрдо рдирд┐рд░реНрднрд░рддрд╛ рдЪреАрдЬреЛрдВ рдХреЛ рдордЬреЗрджрд╛рд░ рднреА рдмрдирд╛рддреА рд╣реИред

ICU рдХреЛ рдЕрдм NuGet рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдРрд╕реЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдИрд╕реАрдпреВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреНрдо рдирд┐рд╣рд┐рдд рдРрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛред рдбреЙрдХреНрд╕ рдореЗрдВ рдРрдк-рд▓реЛрдХрд▓ рд╕реЗрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдРрдк рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@tarekgh , рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ Contains рдФрд░ IndexOf рдмреАрдЪ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдкреНрд░рддрд┐ рдирд╣реАрдВ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ IndexOf рдЬреЛ рдХрд┐ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ ASCII- рдХреЗрд╡рд▓ рддрд╛рд░ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рд╕реНрдерд╛рдиреАрдп-рдирд┐рд░реНрднрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдерд╛!)ред

рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдиреАрдп / рдПрдирдПрд▓рдПрд╕ / рдЖрдИрд╕реАрдпреВ-рд╕рдВрдмрдВрдзреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ / рд░рдирдЯрд╛рдЗрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реИ, рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореБрдЭреЗ .NET 5 RC 2 рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗ рд░рд╣рд╛ рд╣реИ):

var actual = "\n\r\nTest";
var expected = "\nTest";

Console.WriteLine($"actual.IndexOf(expected): {actual.IndexOf(expected)}"); // => -1

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рднреА, рдХреНрдпреЛрдВ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛?

рд╣рд╛рдВ ICU рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрджрд▓рд╛рд╡ рд╣реИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдореИрдВ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЬреИрд╕реЗ, .NET рдЯреАрдо рдХреЗ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рдмреИрдареЗ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА:

рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ "\ n \ r \ nTest" рдореЗрдВ ICU рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде "\ nTest" рд╣реИ? рдирд╣реАрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ!

рдФрд░ рдХрд┐рд╕реА рдиреЗ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХреА? рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ!

рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБрдд рдЧрдВрднреАрд░ рдмрдЧ, рдПрдХ рдмрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдЕрд╡рд░реЛрдзрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдХрд╛рд░рдг, рдирдП рдФрд░ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП .NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдПрдВрдЧреЗ!

рдЖрдИрд╕реАрдпреВ рд╡реИрд╕реЗ рднреА рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдЕрдВрдд рд╣реИ?

PS рд╣рд╛рдБ, рдЖрдк рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдВрд╕реНрдХреГрддрд┐-рд╕реНрд╡рддрдВрддреНрд░ IndexOf рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдСрд░реНрдбрд┐рдирд▓ рдзреНрд╡рдЬред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ .NET 5 рдореЗрдВ рдЗрд╕реЗ _that_ рдХрдард┐рди рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ,

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐, IndexOf рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрд╕реНрдХреГрддрд┐-рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд╛рдЗрд▓реНрдб рдореЗрдВ рдХреЛрдб рдХреЗ _tons_ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЭрдВрдбреЗ рдХреЗ IndexOf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣ рдХреЛрдб _use to work_ (рдХреБрдЫ / рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрдо рд╕реЗ рдХрдо)ред рдФрд░ рдпрд╣ .NET 5 рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ IndexOf рд╣реИ рдЬреЛ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдПрдХ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ ASCII- рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рд╕реНрдерд╛рдиреАрдп-рдирд┐рд░реНрднрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдерд╛!)ред

рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдХрд┐ ASCII рд╕реНрдерд╛рдиреАрдп-рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦреЗрдВ http://userguide.icu-project.org/collation/congets рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐ рдХреИрд╕реЗ ASCII рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

For example, in the traditional Spanish sorting order, "ch" is considered a single letter. All words that begin with "ch" sort after all other words beginning with "c", but before words starting with "d".
Other examples of contractions are "ch" in Czech, which sorts after "h", and "lj" and "nj" in Croatian and Latin Serbian, which sort after "l" and "n" respectively.

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ ICU рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдпреВрдирд┐рдХреЛрдб рдорд╛рдирдХ рд╕реЗ рдЪреБрдирддрд╛ рд╣реИ рдЬреЛ рдХрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред @GrabYourPitchforks \r\n\ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдпрд╣рд╛рдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдбреЙрдХ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ https://unicode.org/reports/tr29/ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧреЛрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрд▓реНрд▓реЗрдЦ рдореЗрдВ:

Do not break between a CR and LF. Otherwise, break before and after controls.
--
GB3 | CR | ├Ч | LF
GB4 | (Control \| CR \| LF) | ├╖ | ┬а
GB5 | ┬а | ├╖ | (Control \| CR \| LF)

рдЖрдИрд╕реАрдпреВ рд╡реИрд╕реЗ рднреА рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреА рдкрд░рд╡рд╛рд╣ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдЕрдВрдд рд╣реИ?

рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдЬрд╝реЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛: рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЬреИрд╕реЗ, .NET рдЯреАрдо рдХреЗ рд▓реЛрдЧ рдПрдХ рд╕рд╛рде рдмреИрдареЗ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА:
рдпрд╣ рдПрдХ рдирд┐рдпреЛрдЬрд┐рдд рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБрдд рдЧрдВрднреАрд░ рдмрдЧ, рдПрдХ рдмрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдЕрд╡рд░реЛрдзрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдХрд╛рд░рдг, рдирдП рдФрд░ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП .NET рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рдПрдВрдЧреЗ!

рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдпреЛрдЬрд┐рдд рдХрд╛рдо рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ https://github.com/dotnet/runtime/issues/826 рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВ рдпрд╣ рднреА рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХрднреА рднреА рди рдХреЗрд╡рд▓ .NET рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдУрдПрд╕ рдХреЗ рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕рд▓рд┐рдП рднреА рд╣реИ рдХрд┐ рд╣рдордиреЗ ICU рдРрдк-рд╕реНрдерд╛рдиреАрдп рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рд╡реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдЬрд┐рд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ ICU рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд, рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕реНрд╡рдпрдВ ICU рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ рдФрд░ рдПрдХ рджрд┐рди ICU рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдСрд░реНрдбрд┐рдирд▓ рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдХреА рддрд░рд╣ред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ .NET 5 рдореЗрдВ рдХрдард┐рди рд░реВрдк рд╕реЗ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрднреА рднреА рд╕рд╛рдорд╛рдиреНрдп, рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ .NET 5 RC 2 рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рджрд░рдЕрд╕рд▓ рд╣рдордиреЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рджреМрд░рд╛рди рдСрд░реНрдбрд┐рдирд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд╣рд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЬреЛ рдпрд╣рд╛рдБ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдЪреЗрдд рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдЬрдм IndexOf рддрд░рд╣ рдХреБрдЫ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕реНрдЯреНрд░реАрдВрдЧрдХрдВрдкреИрд░рд┐рд╕рди рдЭрдВрдбреЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд░рд╛рджрд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐, IndexOf рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрд╕реНрдХреГрддрд┐-рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд╣рд╛рдБ рдЬрдВрдЧрд▓реА рдореЗрдВ рдХреЛрдб рдХреЗ рдЯрди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░рдорд┐рдХ рдЭрдВрдбреЗ рдХреЗ рдмрд┐рдирд╛ IndexOf рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ (рдХреБрдЫ / рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ,) рдХрдо рд╕реЗ рдХрдо)ред рдФрд░ рдпрд╣ .NET 5 рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред

рдЗрд╕реАрд▓рд┐рдП рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╣рдо рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрд╡рд┐рдЪ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред System.Globalization.UseNls рдХреЛ рджреЗрдЦреЗрдВ

@tarekgh , рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ \r\n рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЦреЛрдЬ рдХреЛ рдХрд░рддреЗ рд╕рдордп IndexOf рдХрд╛ рдЙрдкрдпреЛрдЧ "Grapheme рдХреНрд▓рд╕реНрдЯрд░ рд╕реАрдорд╛ рдирд┐рдпрдо" (рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд▓реЗ рд╣реА рдпрд╣рд╛рдВ рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ (рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!), Https://unicode.org/reports/tr29/ рдкрдврд╝рдиреЗ рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ \n рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рддрд╛ рд╣реИ CR | ├Ч | LF рдХрд╣рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ ├Ч рдЕрд░реНрде рд╣реИ "рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ (рдпрд╣рд╛рдБ рддреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ")ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдПрдХ рдХреНрд░рдо \r\n\n рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ "рдмреНрд░реЗрдХ" рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдмреНрд░реЗрдХ" рдХреЛ рддреАрд╕рд░реЗ рдПрдХ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ? рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ \r\n\n рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдЧреНрд░реИрдкрд╣реЗрдо рдХреНрд▓рд╕реНрдЯрд░реНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рд╣реИ, рдФрд░, рднрд▓реЗ рд╣реА IndexOf рдХреЛ рдХреЗрд╡рд▓ рдкреВрд░реНрдг рдЧреНрд░реЗрдк рд╕рдореВрд╣реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рд╣реЛ рдФрд░ рдХрднреА рднреА рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕реНрдкрд░реНрд╢ рди рдХрд░рдирд╛ рд╣реЛ, рдлрд┐рд░ рднреА рдЗрд╕реЗ \nTest рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред \n\r\nTest ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдЖрдк рдпрд╣ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ ICU рдФрд░ / рдпрд╛ рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдЕрдиреНрдп рд░рдирдЯрд╛рдЗрдореНрд╕ / рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬреЗрдЬ рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдЪреЗрдд рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдЬрдм IndexOf рддрд░рд╣ рдХреБрдЫ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ StringComparison рдЭрдВрдбреЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд░рд╛рджрд╛ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

_ (рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реНрд╡реАрдХрд░рдг : рдореИрдВ JetBrains рдХреЗ рд▓рд┐рдП ReSharper рд╕рд╣рд┐рдд рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред) _

рдореИрдВ рд╢реБрд░реВ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╕реБрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ReSharper IndexOf рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдПрдЧрд╛:
image

_ (рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ReSharper рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ) _

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд╣рд░ рджреВрд╕рд░реЗ рдЙрдкрдХрд░рдг рдореЗрдВ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЛрдЯрд┐рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд░реНрдЬреА рддрд░реАрдХреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рднреА рдХрд░реЗрдВред

@рдХрднреА рдирд╣реАрдВ

рд╕рд╛рде рд╣реА, рднрд▓реЗ рд╣реА рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ (рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!), Unicode.org/reports/tr29 рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо \ n рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдпреБрдХреНрддрд┐ рдкрдврд╝реА рд╣реИ, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ CR | ├Ч | LF, рдЬрд╣рд╛рдВ ├Ч рдХрд╛ рдЕрд░реНрде рд╣реИ "рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ (рдпрд╣рд╛рдВ рдмреНрд░реЗрдХ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ)"ред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдПрдХ рдЕрдиреБрдХреНрд░рдо \ r \ n \ n рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ "рдмреНрд░реЗрдХ" рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдмреНрд░реЗрдХ рд╕реЗ рдкрд╣рд▓реЗ "рдмреНрд░реЗрдХ" рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ? рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдЧреНрд░реЗрдлрд╝реЗрдо рдХреНрд▓рд╕реНрдЯрд░" рдХреЗ рд░реВрдк рдореЗрдВ \ r \ n \ n рдкрдврд╝рд╛

рд╡рд╣ рд╕рд╣реА рд╣реИред \r\n\n 2 \r\n рдФрд░ \n рд░реВрдк рдореЗрдВ 2 рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛрдВрдЧреЗред

рдФрд░, рднрд▓реЗ рд╣реА IndexOf рдХреЛ рдХреЗрд╡рд▓ рдкреВрд░реНрдг рдЕрдВрдЧреВрд░ рд╕рдореВрд╣реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рд╣реЛ рдФрд░ рдХрднреА рднреА рд╕рдореВрд╣реЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рди рдЫреВрдПрдВ, рдлрд┐рд░ рднреА рдЗрд╕реЗ string \ n \ r \ nTest рдХреЗ рдЕрдВрджрд░ substring \ nTest рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдЧрд▓рдд рд╣реИред \n\r\nTest рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред \n , \r\n , рдФрд░ Test ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ \nTest рдЗрд╕ рддрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдХреНрд▓рд╕реНрдЯрд░ \r\n рдХреЛ рдХреБрдЫ рдкреНрд░рддреАрдХ X рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЕрдм рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ \nXTest рдЬрд┐рд╕рдореЗрдВ \nTest ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдЖрдк рдпрд╣ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ ICU рдФрд░ / рдпрд╛ рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдЕрдиреНрдп рд░рдирдЯрд╛рдЗрдореНрд╕ / рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬреЗрдЬ рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

CultureInfo.CurrentCulture.CompareInfo.IndexOf(actual, expected, CompareOptions.IgnoreSymbols)

рддрд╛рдХрдд рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ (рдЬреЛ \n рдФрд░ \r рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЙрд╕ рд╕рдордп рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд╢реБрджреНрдз рдЖрдИрд╕реАрдпреВ рджреЗрд╢реА рд╕реА рдРрдк рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рдорд╛рдорд▓реЗ рдХреЛ рдЪрд▓рд╛рдпрд╛ рд╣реИ:

void SearchString(const char *target, int32_t targetLength, const char *source, int32_t sourceLength)
{
    static UChar usource[100];
    static UChar utarget[100];

    u_charsToUChars(source, usource, sourceLength);
    u_charsToUChars(target, utarget, targetLength);

    UErrorCode status = U_ZERO_ERROR;
    UStringSearch* pSearcher = usearch_open(utarget, targetLength, usource, sourceLength, "en_US", nullptr, &status);
    if (!U_SUCCESS(status))
    {
        printf("usearch_open failed with %d\n", status);
        return;
    }

    int32_t index = usearch_next(pSearcher, &status);
    if (!U_SUCCESS(status))
    {
        printf("usearch_next failed with %d\n", status);
        return;
    }

    printf("search result = %d\n", index);
    usearch_close(pSearcher);
}


int main()
{
    SearchString("\nT", 2, "\r\nT", 3);
    SearchString("\nT", 2, "\n\nT", 3);
}

рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:

search result = -1
search result = 1

рдЬреЛ .NET рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЬрд╛ рд░рд╣реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╢реЗрд╖ \ n рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ IndexOf рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЦреЛрдЬ рдХреЛ рдХрд░рддреЗ рд╕рдордп "рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рдмрд╛рдЙрдВрдбрд░реА рд░реВрд▓реНрд╕" (рдФрд░ рдХреНрдпрд╛ рдЗрд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк http://unicode.org/reports/tr29/tr29-7.html рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрддрд╛рддрд╛ рд╣реИ:

Grapheme clusters include, but are not limited to, combining character sequences such as (g + ┬░), digraphs such as Slovak тАЬchтАЭ, and sequences with letter modifiers such as kw. Grapheme рдХреНрд▓рд╕реНрдЯрд░ рд╕реАрдорд╛рдПрдВ , regular-expressions, and counting тАЬcharacterтАЭ positions within text. Word boundaries, line boundaries and sentence boundaries do not occur within a grapheme cluster. In this section, the Unicode Standard provides a determination of where the default grapheme boundaries fall in a string of characters. This algorithm can be tailored for specific locales or other customizations, which is what is done in providing contracting characters in collation tailoring tables. рдХреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд╣реЛрдВрдЧреЗ рд▓реЗрдХрд┐рди рдореИрдВ @GrabYourPitchforks рдХреЛ рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд╣рд░ рджреВрд╕рд░реЗ рдЙрдкрдХрд░рдг рдореЗрдВ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЛрдЯрд┐рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд░реНрдЬреА рддрд░реАрдХреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рднреА рдХрд░реЗрдВред

рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣реА рджрд┐рд╢рд╛ рд╣рдо рднреА рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рдЕрдзрд┐рднрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХреА:

| рд╡рд┐рдзрд┐ | netcoreapp3.1 | net5.0 |
| ------------------------------------------------- --------------- | ----------------- | ---------- |
| actual.Contains(expected) | рд╕рдЪ | рд╕рдЪ |
| actual.IndexOf(expected) | 1475 | -1 |
| actual.Contains(expected, StringComparison.CurrentCulture) | рд╕рдЪ | рдЭреВрдард╛ |
| actual.IndexOf(expected, StringComparison.CurrentCulture) | 1475 | -1 |
| actual.Contains(expected, StringComparison.Ordinal) | рд╕рдЪ | рд╕рдЪ |
| actual.IndexOf(expected, StringComparison.Ordinal) | 1475 | 1475 |
| actual.Contains(expected, StringComparison.InvariantCulture) | рд╕рдЪ | рдЭреВрдард╛ |
| actual.IndexOf(expected, StringComparison.InvariantCulture) | 1475 | -1 |

рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЬрдмрдХрд┐ .NET 5 рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдордВрдерди рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ .NET 5 рдФрд░ .NET рдХреЛрд░ 3.1 рдХреЗ рдмреАрдЪ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред .NET 5 рдПрдХ рдорд╛рдирдХ .NET 2.0 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ string рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИред .NET рдХреЙрд▓рд╛рдЗрдЯ рд╕реЗ? рдХреНрдпрд╛ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛?

@Aaronontheweb рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╢реБрд░реВ рдореЗрдВ NUnit3 рдореЗрдВ рдПрдХ рдЬреЛрд░ рд╕реЗ рджреЗрдЦрд╛, рдЬреЛ netstandard2.0 рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реИред рдЙрдиреНрдирдпрди рдХреЗ рдмрд╛рдж, рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рдЬрдм рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдореИрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдХрд┐рддрдиреЗ рдРрдк рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рдкрд╛рдПрдВрдЧреЗ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗ?
рдХреНрдпрд╛ .NET рдЯреАрдо рдиреЗ рджрд░реНрдж рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рдЬрд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдореИрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЕрдЪреНрдЫрд╛ рдЬрд╛рд▓!
рдЕрдЬреАрдм рдХреАрдбрд╝реЗ рд╢рд┐рдХрд╛рд░ рдХрд░рдХреЗ рдЦреБрд╢ рд╕рдордп рдмрд░реНрдмрд╛рдж hunting
рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ InvariantGlobalization рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

рд╣рд╛рдБред рдФрд░ рдПрдл # рд╕рдорд░реНрдерди рдордд рднреВрд▓рдирд╛ред

рдХрд┐рддрдиреЗ рдРрдк рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рдкрд╛рдПрдВрдЧреЗ

рд╢реВрдиреНрдп - рдЪреВрдВрдХрд┐ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ .NET BCL рдХреА рддрд░рд╣ рдмрд╛рд╣рд░реА рдкрд░рд┐рд╡рд╛рджреЛрдВ / рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрддрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХреЗред рдХрдо рд╕реЗ рдХрдо рддрдм, рдЖрдк рдЗрд╕реЗ рдкреНрд░рддрд┐-рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрддрд░ рдкрд░ рдСрдкреНрдЯ-рдЗрди / рдЖрдЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ .NET рдорд╛рдирдХ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рд╣реЛ рдЧрдИ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдореИрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЬреЛ рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдпрд╛ рддреЛ рдЖрдИрд╕реАрдпреВ рдпрд╛ рдПрдирдПрд▓рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рд╣рдорд╡рддрди рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЖрдИрд╕реАрдпреВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдПрдЧреАред

рдЖрдк рд╕рдордп рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд░рд╣рдХрд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд┐рдВрдбреЛрдЬ рдЯреАрдо рд╕реЗ рд▓реЗрдВ рдХрд┐ рд╡реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛рд░реНрдп рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬреЛ .NET рдорд╛рдирдХ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдмрдирд╛рдо рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рд╡рд╛рд▓реЗ .NET рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХреА рд╣реИ (рдФрд░ рд╢рд╛рдпрдж рдФрд░ рднреА рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрднреА рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХрдЬреБрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕рд╣реА рдХреЛрдб рдХреЛ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реАред

рдХреНрдпрд╛ рдЖрдк StringComparison.Ordinal рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреБрд▓рдирд╛ рдХреА рд░рдгрдиреАрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ? рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЗрддрдирд╛ рдЕрд╕реНрдерд┐рд░ рд╣реИ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реНрдерд┐рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рд╢рд░реНрдд рд▓рдЧрд╛рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВ рдХрд┐ 99.9% рд▓реЛрдЧ, рдЬреЛ string.Equals(...) рдпрд╛ string.Contains(...) рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ StringComparison рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдЕрдЬреАрдм quirks рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдЗрд░рд╛рджреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╕реНрдерд╛рдиреЛрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдкрд╣рд▓реЗ рд╣реА рджрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ:

рджрд░рдЕрд╕рд▓ рд╣рдордиреЗ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рджреМрд░рд╛рди рдСрд░реНрдбрд┐рдирд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд╣рд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЬреЛ рдпрд╣рд╛рдБ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрдВрдбреЗрдХреНрд╕рдСрдл рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд░рд╛рджреЗ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ StringComparison рдЭрдВрдбреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдХрдореНтАНрдкреНтАНрдпреВрдЯрд░ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ICU рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреА рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреБрд░рд╛рдиреЗ рд╡реНтАНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдПрдЧреАред

рдореИрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЖрд╡реЗрджрди рдирд╣реАрдВред рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХрд▓рди рд╕рдордп рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп InvariantCulture , рдЬреЛ рдореЗрд░реА рдкрд┐рдЫрд▓реА рд╕рдордЭ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ IndexOf рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ .NET 5.0 рдФрд░ .NET рдХреЛрд░ 3.1 рдХреЗ рдмреАрдЪ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рднрд┐рдиреНрди рд╣реИред

рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@petarrepac рдпрд╣ рднреА рдПрдХ C #

@ рдЖрдИрд╕рд╛рдХрд╛рдмрд░рд╛ рдФрд░ рд╡реАрдмреА рднреА;)

рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХрд▓рди рд╕рдордп рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

@Aaronontheweb рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рддрд░реАрдХрд╛ рд╣реИ (рдЬрдм рдРрдкреНрд╕ рдХреЛ

<ItemGroup>
  <RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>

EDIT: рдпрд╣ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрддреЗ рд╕рдордп рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдЯреАрдо ICU рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ ICU рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреА рдХрд╣рд╛рдиреА рд╣реЛрдЧреА, рдФрд░ рд╣рдо OS рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдкрддрд▓реА рдЖрд╡рд░рдг рд╣реИрдВред

рдЬрдм .NET .NET рдорд╛рдирдХ 2.0 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ? рдХреНрдпрд╛ рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛?

рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ .NET рдорд╛рдирдХ рд░рдирдЯрд╛рдЗрдореНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдмреАрдЪ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рд╕реНрдерд┐рд░рддрд╛ рд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реАрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ ICU рд░рд┐рдЬрд▓реНрдЯ рдорд┐рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ ICU рдмреИрдХрд┐рдВрдЧ рд╣реИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпреВрдирд┐рдХреНрд╕ рдореЗрдВред

@reflectronic рдЕрдкрдиреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕рд╣реА рд╣реИ https://github.com/dotnet/runtime/issues/43736#issuecomment -716681586ред

рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЧрдП @jbogard рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/dotnet/runtime/issues/43736#issuecomment -716527590, рдЖрдк Windows рдФрд░ ICU рдХреЗ рдмреАрдЪ рднрд╛рд╖рд╛рдИ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмреАрдЪ рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, ICU рдЕрдм рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрдкрдпреЛрдЧ рдмрдврд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рдкрд░рд┐рдгрд╛рдо .NET рдХреЛрд░ 3.1 рдФрд░ рдиреАрдЪреЗ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреЛ рд▓рд┐рдирдХреНрд╕ рдкрд░ .NET 5.0 рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░рддрд╛ рджрд┐рдЦрд╛рдПрдЧрд╛ред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдмрд┐рдВрджреБ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд╡рд╣ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреВрдЯреЗ рд╣реБрдП рдереЗред

рдХреНрдпрд╛ рдЖрдк StringComparison.Ordinal рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреБрд▓рдирд╛ рд░рдгрдиреАрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ?

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╢рд┐рдХрд╛рдпрдд рдХрд╛ рдЖрдХрд╛рд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред рд╣рдо рдХреЛрд▓рд╛рдЬ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдЭрдВрдбреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЖрд╡реЗрджрди рдирд╣реАрдВред рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХрд▓рди рд╕рдордп рджреЗрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рд╣рд╛рдВ, рдХреБрдЫ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдо рддреМрд░ рдкрд░ рдЯрдХрд░рд╛рд╡ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рджреЗрдЦреЛ рдФрд░ рджреЗрдЦреЛ рдЬреЛ рдПрдХ рдЕрдзреНрдпрд╛рджреЗрд╢ рдпрд╛ рднрд╛рд╖рд╛рдИ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛ред

рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛрдб рдХреЛ рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрдХрд░рд╛рд╡ рдПрдкреАрдЖрдИ рдХреА рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЭрдВрдбреЗ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕реЗ рдХреЙрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред

рдпрд╣ рднреА рдПрдХ # рд╕реА рдмрд╛рдд рд╣реИред

рдкрд░рд┐рд╡рд░реНрддрди .NET рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрджрд░ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реА # рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@tarekgh рдПрдХ C # рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЦреБрдж рдХреЛ VB рдпрд╛ F # рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп InvariantCulture , рдЬреЛ рдореЗрд░реА рдкрд┐рдЫрд▓реА рд╕рдордЭ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдпрд╣ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрдВрддрддрдГ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЕрдВрддрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджрд░реНрдЬрдиреЛрдВ рдмрдЧреЛрдВ рдХреЛ рдвреВрдВрдврд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрдИ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХреЛрдВ рдиреЗ рд╡рд░реНрд╖реЛрдВ рдФрд░ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рдЕрдЬреНрдЮрд╛рдд 5 рдХреА рдирдИ рдлрд╕рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВрдиреЗ рдЕрдирдЬрд╛рди рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдирдИ рдлрд╕рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ рдФрд░ рди рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрди рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдлрд┐рд░ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реА рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрднрд░рддрд╛ рднреАред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд░реНрдерд┐рдХ рд▓рд╛рдЧрдд рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирдП рдЙрддреНрдкрд╛рджрдХрддрд╛ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред MSFT рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдкрд░ рдЙрдирдХреА рд▓рд╛рдЧрдд / рд▓рд╛рдн рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬреИрд╕реЗ, рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдХрдиреАрдХреА рдпреЛрдЧреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ - рд╣рд╛рдВ, рдзрдиреНрдпрд╡рд╛рджред рдХреГрдкрдпрд╛ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рд▓рд╛рдЧрдд рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реЛрдиреЗ рдХреЗ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдЖрд░реНрдерд┐рдХ рд▓рд╛рднреЛрдВ рдХреЛ рдмреЗрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреНрдпреЛрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред .NET 5 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡реИрд╕реЗ рднреА рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдЪреВрд╣реЗ рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рдХреНрдпрд╛ рд╣реИ?

@tarekgh рдПрдХ C # рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЦреБрдж рдХреЛ VB рдпрд╛ F # рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИ?

рд╣рдо рдПрдХ рдПрдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде C # рдФрд░ VB рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ, рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рднрд╛рд╖рд╛-рдЕрдЬреНрдЮреЗрдп рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд╕рдордп F # рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╡рд░реЗрдЬ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@Aaronontheweb рдХрд┐рд╕реА https://docs.microsoft.com/en-us/archive/blogs/shawnste/locale-culture-data-churn рджреЗрдЦреЗрдВ рдЬреЛ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдирдПрд▓рдПрд╕ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ ICU рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдкреНрд╕ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ рдХрд┐рд╕реА рднреА рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред 5.0 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЕрдиреНрдп рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдРрдкреНрд╕ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирдП рдЕрдЪреНрдЫреЗ рдлрд╝реАрдЪрд░реНрд╕ рдорд┐рд▓реЗрдВрдЧреЗ рдФрд░ рдРрдк рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдУрдПрд╕ рдФрд░ рдУрдПрд╕ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдирдПрд▓рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде 5.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрд╡рд┐рдЪ рд╣реИред рдХрд┐ рдЖрдИрд╕реАрдпреВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрдирдпрди рдирд┐рд░реНрдгрдп рдореЗрдВ рдПрдХ рдХрд╛рд░рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрдм ICU рдХреЗ рд╕рд╛рде, рдРрдкреНрд╕ рдХреЗ рдкрд╛рд╕ OS рдХреЗ рдкрд╛рд░ рдЕрдзрд┐рдХ рд╕рдВрдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрдк-рд╕реНрдерд╛рдиреАрдп ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдкрд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдРрдкреНрд╕ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/dotnet/runtime/issues/43802

(рдпрд╣ рдореБрджреНрджрд╛ IndexOf _per se_ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд▓реНрдХрд┐, рдпрд╣ рд╕рдВрд╕реНрдХреГрддрд┐-рдЬрд╛рдЧрд░реВрдХ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП Compare рд░реВрдЯреАрди рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред)

рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛрдб рдХреЛ рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрдХрд░рд╛рд╡ рдПрдкреАрдЖрдИ рдХреА рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЭрдВрдбреЗ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕реЗ рдХреЙрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ csproj рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрди рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдмрд┐рдирд╛ .NET 5 рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рдПрдВрдЧреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдПрдл # рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

@ рдЬреЗрдлрд╣рдВрдбрд▓реА рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпрд╛ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╕рдВрднрд╡ "рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб" F # рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдПрдХ рдЫреЛрдЯрд╛ рдмрд╛рдЬрд╛рд░ рд▓реЗрдХрд┐рди рдПрдХ рдРрд╕рд╛ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ MS рджреНрд╡рд╛рд░рд╛ .NET рдХреЗ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ) рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рдорд╛рд▓реВрдо рд╣реИ:

рдкрд░рд┐рд╡рд░реНрддрди .NET рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрджрд░ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реА # рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рдорд╛рд▓реВрдо рд╣реИ:
рдкрд░рд┐рд╡рд░реНрддрди .NET рд░рдирдЯрд╛рдЗрдо рдХреЗ рдЕрдВрджрд░ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реА # рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ .NET рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рднрд╛рд╖рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдЧреА рдФрд░ рди рдХреЗрд╡рд▓ C #ред

рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреА рд░рд╛рдп рдХреЛ рдЬреЛрд░рджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирдИ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЗрди рдЧреЛрдЪрд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред

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

рдЕрднреА рдЖрдк рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП @meziantou рд╕реЗ рдЗрд╕ рд░реЛрд╕рд▓рд┐рди рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/meziantou/Meziantou.Analyzer/tree/master/docsред

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ MA0074 рдлреЗрдВрдХ

image

рдпрд╣ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рд░реЛрдЬрд╝рд▓рд┐рди рдореБрджреНрджреЗ рдХреЛ рдпрд╣рд╛рдБ рдЦреЛрд▓рд╛ рд╣реИ: https://github.com/dotnet/roslyn-analyzers/issues/4367

@tarekgh рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░рд╛ рдореВрд▓ рдмрд┐рдВрджреБ рдпрд╣ рдерд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕рднреА .NET рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ analyzers рдпрд╣рд╛рдВ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИрдВред

рд╣рдо рдЗрдВрдбреЗрдХреНрд╕рдСрдл рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд░рд╛рджреЗ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ StringComparison рдЭрдВрдбреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ ( [Obsolete] рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)?

.NET рдорд╛рдирдХ рд╕рдВрдЧрддрддрд╛ рдХреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдкреАрдЖрдИ рд╕рддрд╣ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ?

рдЧреНрд░реИрдлрд╝реЗ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХреЛ рд╕рдореНрдорд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдирд┐рдХрдЯ рд╕рдВрдмрдВрдзреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд╕рдВрдЧрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдХреЛрдИ рдРрд╕рд╛ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдордВрдЬрди рдХрд░ рд░рд╣рд╛ рд╣реЛ, рд╡рд░реНрдгреЛрдВ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рдЙрджрд╛рд╕реАрди рд╣реЛ, рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░, рдпрд╛ рд▓реЛрдХреЗрд▓, рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓реЗрдЧрд╛ рдХрд┐ рдпрджрд┐ str.Contains (рдЬреЛ рднреА) рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ str.ndexOf (рдЬреЛ рднреА рд╣реЛ) рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред ) рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рдирд╛ рд╕рднреА рддрд░реАрдХреЛрдВ рдореЗрдВ

рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХреЛрдб рд╢рд┐рд╡рд┐рд░ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░ рди рдЙрдард╛рдПрдВред

рдореИрдВ @lupestro рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд╡рд┐рдзрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐ рдмрд╣реБрдд рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЗ рд╣реИрдВ, рддреЛ рджреЛрдиреЛрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рджреБрдЦ рд╣реЛрдЧрд╛ред рд▓реЛрдЧ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ, рд╡реЗ рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рдзреЛрдЦрд╛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдиреНрдп рдЯрд╛рдЗрдордмреЙрдореНрдм рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рд╕реЗ рд╣реЛрдВрдЧреЗред .NET рджрддреНрддрдХ рдЧреНрд░рд╣рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдкрд░ C # рдмрдВрдж рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдУрд╡рд░рд▓реЛрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд▓реЛрдХреЗрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЛрдХреЗрд▓ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреБрд▓рдирд╛ рдФрд░ рддреБрд▓рдирд╛рддреНрдордХ рд╣реИ, рд╢рд╛рдпрдж (рдЕрдВрддрд┐рдо) рдЗрдВрдбреЗрдХреНрд╕рдСрдл (рдХреЛрдИ рднреА) рдФрд░ (рдЕрдВрддрд┐рдо) рдЗрдВрдбреЗрдХреНрд╕рдСрдл (рдХреЛрдИ рднреА) рд╕рд╛рдзрд╛рд░рдг рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореБрдЭреЗ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрдж рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреНрд░рдорд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╣реНрд░рд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рддреЗрдЬ рдпрд╛ рд╕рд╣реА рдореЗрдВ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ рддреЛ рдореИрдВ 'рд╕рд╣реА' рдЪреБрдиреВрдВрдЧрд╛ред рдЕрд╕рдВрдЧрдд, рдЧреИрд░-рд╕рд╣рдЬ рд╡реНрдпрд╡рд╣рд╛рд░ рдмреЗрд╣рдж рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рд╣реИ рдХрд┐ рдпрд╣ .NET 5.0 рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рди рдХрдард┐рди рд╣реИ рдФрд░ рд╕рдВрд╕реНрдХреГрддрд┐ (рд╕рдордп рдХреА рддрд░рд╣) рдЬрд╛рдирдХрд╛рд░реА рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреИрд░-рддрдХрдиреАрдХреА рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЪреЗрддрд╛рд╡рдиреА (5.0 рдореЗрдВ) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐

TLDR: рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЗ рдЕрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдХреБрдЫ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рджреЗрдВред

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

рдпрд╣ рдпреВрдирд┐рдХреЛрдб рдЧреНрд░реИрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореБрдЭ рдкрд░ рдПрдХ рдирдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓рд╛рдЗрди рдлреАрдбреНрд╕ рдФрд░ рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рд╣реЛрдЧреА, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдЖрдорддреМрд░ рдкрд░ рдЗрдиреНрд╡реИрд░реЗрдВрдЯ рдУрд╡рд░рд▓реЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реЛред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛ рджреЛрдиреЛрдВ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрдХрдиреАрдХреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдСрдкреНрдЯ-рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рд╡рд╣ рдЬрд╣рд╛рдЬ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реА рдЪрд▓рд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди _рд╣рд┐рд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ_ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рдмреНрд▓реЙрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, рднрд╛рд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиред рдореЗрд░реЗ рд╕рд╣рдХрд░реНрдореА рдирдП рд╕реА # 9.0 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдмрдореБрд╢реНрдХрд┐рд▓ рд╡рд╛рдХрд┐рдл рд╣реИрдВ, рдЖрдЗрдП рдХреБрдЫ рдЖрд░реНрдХрди рдЖрдЗрдпреВ рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рдХреЛрдб рдХреЛ рдЖрдЬ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рди рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ .NET 5 (рдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛, .NET 6 рдпрд╛ 7) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдПрдХ рдмрд╛рдд рд╣рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХрд▓ рд░рд╛рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдПрдХ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдЦрд░реАрджрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдирдП рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдкреНрд░рд╛рд░реВрдк https://github.com/dotnet/runtime/issues/43956 рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдирдП рдореБрджреНрджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ ( "\r\n" рдмрдирд╛рдо "\n" ) рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдЬрдм рд╣рдо @GrabYourPitchforks рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдлрд┐рд░ рд╕реЗ

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

рдЧреНрд░реИрдлрд╝реЗ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рдХреЛ рд╕рдореНрдорд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдирд┐рдХрдЯ рд╕рдВрдмрдВрдзреА рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд╕рдВрдЧрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдХреЛрдИ рдРрд╕рд╛ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдордВрдЬрди рдХрд░ рд░рд╣рд╛ рд╣реЛ, рд╡рд░реНрдгреЛрдВ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рдЙрджрд╛рд╕реАрди рд╣реЛ, рдЧреНрд░реЗрдлреЗрдо рдХреНрд▓рд╕реНрдЯрд░, рдпрд╛ рд▓реЛрдХреЗрд▓, рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд▓реЗрдЧрд╛ рдХрд┐ рдпрджрд┐ str.Contains (рдЬреЛ рднреА) рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ str.ndexOf (рдЬреЛ рднреА рд╣реЛ) рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред ) рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХреЗ рд╕реЗ _same рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ_, рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдореБрдХреНрдд рдХрд░рддреЗ рд╣реБрдПред

рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХреЛрдб рд╢рд┐рд╡рд┐рд░ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░ рди рдЙрдард╛рдПрдВред

рд╣рд╛рдВ, рдЗрд╕рдиреЗ рдореЗрд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдиреА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╢рд╛рдпрдж рд╣реА рдХрднреА StringComparison рдпрд╛ CultureInfo рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо IndexOf рдФрд░ Contains рдмреАрдЪ рдПрдХ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ!
.net 5.0
image
.net рдХреЛрд░ 3.1
image
редрд╢реБрджреНрдз рд░реВрдкрд░реЗрдЦрд╛
image

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

рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣рдореЗрд╢рд╛ рдЕрд╕рдВрдЧрдд рд░рд╣реА рд╣реИрдВред рд╡реЗ рдЕрдЪрд╛рдирдХ .NET 5.0 рдореЗрдВ рдЕрд╕рдВрдЧрдд рдирд╣реАрдВ рдмрдиреЗред рдЕрдЧрд░ рдореИрдВ рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ IndexOf рдиреЗ рд╣рдореЗрд╢рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХреГрддрд┐ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, Contains рдиреЗ рд╣рдореЗрд╢рд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рджреА рдЧрдИ .NET .NET рдореЗрдВ рдЕрдзрд┐рдХ рдЕрд╕рдВрдЧрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЧрд▓рддреА рдореВрд▓ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдереА рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдЕрдЧрд░ рдореИрдВ рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ IndexOf рдиреЗ рд╣рдореЗрд╢рд╛ рдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, Contains рдиреЗ рд╣рдореЗрд╢рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХреГрддрд┐ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рджреА рдЧрдИ .NET .NET рдореЗрдВ рдЕрдзрд┐рдХ рдЕрд╕рдВрдЧрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЧрд▓рддреА рдореВрд▓ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдереА рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдпрд╣ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ, IndexOf(string) рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХреГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, IndexOf(char) рд╕рд╛рдзрд╛рд░рдг рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ Contains рдХреНрд░рдорд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ IndexOf рдмрдирд╛рдо Contains рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛, рдЬреЛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╣рд╛ рдерд╛ред

IndexOf(string) рдиреЗ рд╣рдореЗрд╢рд╛ _CurrentCulture_ рддреБрд▓рдирд╛ рдХреА рд╣реИ, рдФрд░ Contains(string) рдиреЗ рд╣рдореЗрд╢рд╛ _Ordinal_ рддреБрд▓рдирд╛ рдХреА рд╣реИред рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╡рд╛рдкрд╕ рдореМрдЬреВрдж рд╣реИред рдпрд╣ .NET 5. рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рдПрдХ рдирдИ рд╡рд┐рд╕рдВрдЧрддрд┐ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ (рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреА рдПрдирдПрд▓рдПрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдкрд░, рд▓рд┐рдЧрдЪрд░ "├ж" рдФрд░ рджреЛ-рдЪрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдР" рдХреА рддреБрд▓рдирд╛ рдПрдХ рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд╛ рдХреЗ рддрд╣рдд рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдирд┐рдореНрди рд╡рд┐рд╕рдВрдЧрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

// Sample on .NET Framework, showing Contains & IndexOf returning inconsistent results
Console.WriteLine("encyclop├жdia".Contains("ae")); // prints 'False'
Console.WriteLine("encyclop├жdie".IndexOf("ae")); // prints '8' (my machine is set to en-US)

рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рдПрдХ рджрд╢рдХ рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдпрд╣ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдз https://github.com/dotnet/runtime/issues/43956 рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рд╕реЗ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ: "рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ _in рдЕрднреНрдпрд╛рд╕_ рдХреЛ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдмрдбрд╝рд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдП?" рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рд╕реАрдорд╛ рдХрд╣рд╛рдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рдХреА рд░рд┐рдкреЛрд░реНрдЯ _extremely_ рд╕рд╣рд╛рдпрдХ рд╣реЛрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддреА рд╣реИрдВ рдХрд┐ рдЗрди APIs рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрд░реЗрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдПрдБ рд╣реИрдВред рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕реНрдЯреВрд╡рд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рддрдХрдиреАрдХреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдРрдк рдЗрди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдХреБрдЫ рдЧрд▓рдд рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдордиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ InvariantCulture рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдХрд┐ \n ICU рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ?

image
image

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо git рдФрд░ рдЙрд╕рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (autocrlf = true) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдирдХреНрд╕ рдкрд░ 5 рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ -1 рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ?

using System;

var s = @"hello
world";
Console.WriteLine(s.IndexOf("\n", StringComparison.InvariantCulture));

@ufcpp рд╣рд╛рдВ, рдЖрдИрд╕реАрдпреВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЬрдм рджреЛрдиреЛрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдЯреЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ <CR><LF> рдХреЛ рднрд╛рд╖рд╛рдИ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЯреВрдЯ рдЗрдХрд╛рдИ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд┐рддреНрд░ (рдЬреИрд╕реЗ _InvariantCulture_) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ <LF> рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВ рдмрдиреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдЕрдЯреВрдЯ рдЗрдХрд╛рдИ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдЧрд╛ред

рдореИрдВ рд╕рднреА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрдбреЗрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рд╣рдордиреЗ 5.0 рдЬреАрдП рдХреЗ рд▓рд┐рдП рдЖрдИрд╕реАрдпреВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдЬрдм рдХреНрд░рдорд┐рдХ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧрд▓рддреА рд╕реЗ рдЧрдбреНрдвреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗ, рддреЛ рдпрд╣ https://github.com/dotnet/runtime/issues/43956 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдХрдард┐рди рдирд┐рд░реНрдгрдп рдерд╛ рдФрд░ рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рддрд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рддреМрд▓рдирд╛ рдерд╛ред

рдпрджрд┐ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдорд┐рддрд╡реНрдпрдпрд┐рддрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдореЗрдВ \r\n рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдИрд╕реАрдпреВ рд╕реНрд╡рд┐рдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ "рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛" рд╣реИред рд╣рдо рдорддрднреЗрджреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ICU рдпрд╛ .NET рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

StringComparison рдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд┐рдпрдо рд╣реИред

https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1307

рдореИрдВ рд╕рднреА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрдбреЗрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рд╣рдордиреЗ 5.0 рдЬреАрдП рдХреЗ рд▓рд┐рдП рдЖрдИрд╕реАрдпреВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рдЬрдм рдФрдбрд┐рдирд▓ рдХреЛ рдЗрд░рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдЧрд▓рддреА рд╕реЗ рднрд╛рд╖рд╛рдИ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВрдЧреЗред рдЖрдиреЗ рд╡рд╛рд▓реЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд╣рдо рдЖрдЧрд╛рдореА 5.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдбреЙрдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдХрдард┐рди рдирд┐рд░реНрдгрдп рдерд╛ рдФрд░ рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рддрд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рддреМрд▓рдирд╛ рдерд╛ред

рдпрджрд┐ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдорд┐рддрд╡реНрдпрдпрд┐рддрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдореЗрдВ \r\n рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдИрд╕реАрдпреВ рд╕реНрд╡рд┐рдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдореБрджреНрджреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдХ рдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ "рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛" рд╣реИред рд╣рдо рдорддрднреЗрджреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдореВрд▓ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ICU рдпрд╛ .NET рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА .NET рдорд╛рдирдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд╢рдХ рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрдХреНрд░рдордг рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред .NET рдорд╛рдирдХ 2.2? рдПрдкреАрдЖрдИ рдмрджрд▓реЗрдВ?

рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рди рд╕рдХреВрдВ рдХрд┐ рдореБрдЭреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдореМрдЬреВрджрд╛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреА рдЕрдкрдиреА рдЙрдЪрд┐рдд рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред

рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдХреГрдкрдпрд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░реЗрдВ - рдпрд╣ рдореЗрд░реЗ рдорди рдХреЛ рд╢рд╛рдВрдд рдХрд░реЗрдЧрд╛ :)

@rcollina

рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА .NET рдорд╛рдирдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред

.Net рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдорддреМрд░ рдкрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдЬ .ix Core 3 рдкрд░ Unix рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдЬреЛ ICU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ), рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ .Net 5 рдкрд░ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдЬреЛ рдХрд┐ ICU рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

.NET рдорд╛рдирдХ 2.2

.Net рдорд╛рдирдХ vNext рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ ".Net 5.0" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред (рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдврд╛рдБрдЪреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЬ рдЖрдк .Net Standard 2.1 рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ, рдЖрдк .Net 5.0 рдХреЗ рдмрдЬрд╛рдп рд▓рдХреНрд╖реНрдп рдХрд░реЗрдВрдЧреЗред)

@svick рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ .NET рдорд╛рдирдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ .NET 5 рдирдпрд╛ .NET рдорд╛рдирдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛ред

рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ .NET .NET 2.1 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрддрд╛ рд╣реВрдБ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдБ рдХрд┐ IndexOf рдФрд░ Contains рдХреЗ рдмреАрдЪ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд╕рдВрдЧрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛ред

рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рдЖрдЙрдЯ рдСрдл рдмреИрдВрдб, рдЖрдИрд╕реАрдпреВ рдмрдирд╛рдо рдПрдирдПрд▓рдПрд╕ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЙрд╕ рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреЛ рдЪреМрдбрд╝рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдереА, рдФрд░ рдЙрдореНрдореАрджреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред
рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ libs рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рд╕рднреА рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕ рднрд╛рд╡рдирд╛ рдХреЛ рд╣рд┐рд▓рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИрдВ, рдирдП рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рдЬ рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдкрде рдХреЗ рдмрд┐рдирд╛ред рдЬрд┐рд╕рдХреА рдЕрддреНрдпрдВрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдХреЗрд▓реЗ рднреВрдХрдВрдкреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рджреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕реА рдХреМрди рд╕реА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА .NET рдорд╛рдирдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред

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

рдирд╣реАрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдЬреЛрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ ICU рдореЗрдВ _always_ рдХрд╛ рдЙрдкрдпреЛрдЧ Unix рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред .NET рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдЬреЛ рдкрд╣рд▓реЗ рд▓рд┐рдирдХреНрд╕ .NET рдХреЛрд░ 3.x рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред .NET 5 рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп InvariantCulture рд╣реИ, рдЬреЛ рдореЗрд░реА рдкрд┐рдЫрд▓реА рд╕рдордЭ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдЪ рдирд╣реАрдВред InvariantCulture рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рдпреВрдирд┐рдХреЛрдб рдпреБрдХреНрддрд┐ рдпрд╛ рднреВрдордВрдбрд▓реАрдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЖрджрд┐ рдХреЗ рдЕрджреНрдпрддрди рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ .NET рдЯреАрдо рдиреЗ рджрд░реНрдж рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рдЬрд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдХреЛрдб рдЬреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЕрдЪрд╛рдирдХ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЧрд▓рдд рдерд╛ред рдпрджрд┐ .NET рдЯреАрдо рдХреЛ рдЧрд▓рдд рдХреЛрдб рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ рддреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП? рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдВрдЧрддрддрд╛ рд╕реНрд╡рд┐рдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ .NET рдХреЛрд░ рдХреЗ рдХрд╛рд░рдг рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╛рдЗрдб-рдмрд╛рдп-рд╕рд╛рдЗрдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рдРрдк-рд▓реЛрдХрд▓ рд░рдирдЯрд╛рдЗрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдХрд╛рд░рдг .NET 5 рдореЗрдВ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ .NET 5 рдореЗрдВ рди рдЬрд╛рдПрдВред

рдореИрдВ рдЕрднреА рдЕрдЬреНрдЮрд╛рдд 5 рдХреА рдирдИ рдлрд╕рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВрдиреЗ рдЕрдирдЬрд╛рди рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдирдИ рдлрд╕рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ рдФрд░ рди рдХреЗрд╡рд▓ рдореЗрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрди рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдлрд┐рд░ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реА рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрднрд░рддрд╛ рднреАред

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рдбрд┐рдлрд░реЗрдВрд╕ рдмрдЧреНрд╕ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ .NET рдЯреАрдо рдиреЗ рджрд░реНрдж рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рдЬрд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреЛрдИ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред

рд▓рд╛рдЦреЛрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ .NET рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд▓рдЧрд╛рддрд╛рд░ рдСрдкрд░реЗрд╢рди рд╣реИред
.NET рдЯреАрдо рдХреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ / рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреНрд░рдпрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдпрд╛рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдШрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕реЗ .NET 5/6 рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдпреЛрдЬрдирд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрдирд╛ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?
рдХреНрдпрд╛ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЕрд╕рд░ рдЕрдиреБрдорд╛рдирд┐рдд рдерд╛?
рдХреНрдпрд╛ рдпрд╣ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ 0.001% рд╣реИ? рдХреНрдпрд╛ рдпрд╣ 75% рд╣реИ?
рдЕрдиреНрдп рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХреНрдпрд╛ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реЛред
рд▓реЗрдХрд┐рди, рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрдорд╛рди рдерд╛?

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

@petarrepac рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рдПрдХ рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд░рдирдЯрд╛рдЗрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд╡рд┐рдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред
  2. рддреЛрдбрд╝рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рднреА рдЧреИрд░-рд╡рд┐рдВрдбреЛрдЬрд╝ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ .NET рдХрд╛ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред
  3. рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рдВрд╕реНрдХреГрддрд┐-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдзреНрдпрд╛рджреЗрд╢ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдерд╛ред

рдкрд┐рдЫрд▓реЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдХрд╛рдлреА рдХрдо рдкреНрд░рддрд┐рд╢рдд рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред

100% рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рд▓реЛрдЧ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрджреНрдзреГрдд рдХрд┐рдП рдЧрдП рдЬреИрд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рдЕрдХреНрд╕рд░ рдпрд╣ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкреАрдЫреЗ рдХреА рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣реИрд▓реЛ рд╕рднреА рдХреЛред рд╣рдо рдЙрди рдореБрджреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬреЛ рд╣рдордиреЗ рддрдм рдЙрдард╛рдП рдереЗ рдЬрдм рдпрд╣ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рдерд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдордиреЗ рд╡рд┐рдВрдбреЛрдЬ 10 рдордИ 2019 рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдЦрдиреЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ .NET 5.0 рдХреЗ рд▓рд┐рдП ICU рд╣реЛрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред

рдЬрдм рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╣рдордиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рднрд╛рд╡реЛрдВ рдФрд░ рджрд░реНрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХреА рдереА рдЬреЛ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде Contains(string) рдмреАрдЪ рдЕрд╕рдВрдЧрддрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ Ordinal рдФрд░ IndexOf(string) рд╕рдВрд╕реНрдХреГрддрд┐-рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп API рдХреЗ рдХрд▓реНрдЪрд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╕реНрдХреГрддрд┐-рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд▓реЗрдХрд┐рди Span<char> рдпрд╛ ReadOnlySpan<char> рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ Ordinal рд╣реЛрдиреЗ рдкрд░ред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ NuGet рд╕рдВрдХреБрд▓ рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдереЗ:

  • IndexOf, LastIndexOf, EndsWith, StartsWith, рддреБрд▓рдирд╛, рдФрд░ ComparTo рдХреЛ рджрд┐рдП рдЧрдП "рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ" рдкрд░ "n" # 30 рд╣реИред
  • 1% рдХреЙрд▓рд┐рдВрдЧ String.EndsWith рдПрдХ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ рдЬреЛ \ n рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреЙрд▓рд┐рдЯ рдЬрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдореЗрдВ "рд╡рд┐рдВрдбреЛ-рд╕реНрдЯрд╛рдЗрд▓ рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧреНрд╕" рдХреЛ рддреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
  • NuGet.org рдкрд░ 2040 рдкреИрдХреЗрдЬ рдЖрдИрдбреА рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЙрд▓рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИред
  • рдЗрди рдХреЙрд▓рд╕рд┐рдЯ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣рд┐рд╕реНрд╕рд╛ рдПрдВрдбрд╕реНрд╡рд┐рде рдФрд░ рдЗрдВрдбреЗрдХреНрд╕рдСрдл рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЗрд╕ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рднреЛрд▓реА рд░реЗрдЦрд╛-рдмреНрд░реЗрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрди 2040 рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЬреЛрдЦрд┐рдо-рдЬреЛрдЦрд┐рдо рд╡рд╛рд▓реЗ рдХреЙрд▓рд▓рд╛рдЗрдЯ рдереЗ, рдХреЗрд╡рд▓ 539 .NET рдорд╛рдирдХ рдпрд╛ .NET рдХреЛрд░ рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ NuGet.org рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХреЗрд╡рд▓ 0.54% рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдЯреВрдЯрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рд╣рдордиреЗ 539 рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреИрдХреЗрдЬ рдЖрдИрдбреА рдХреА рд╕реВрдЪреА рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рд╣рдордиреЗ рд╢реАрд░реНрд╖ 70 (рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рдЙрдВрдЯ рджреНрд╡рд╛рд░рд╛) рдХреЛ рджреЗрдЦрд╛, 20 рдиреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреИрдЯрд░реНрди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдЬреЛ рдкреИрдЯрд░реНрди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рд╣рдо рдХреЗрд╡рд▓ 32 рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрдЬреНрдЮреЗрдп рд▓рд╛рдЗрд╕реЗрдВрд╕ рдерд╛:

  • 14 рдмрдЧ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рдереЗ
  • 13 рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЧрдП рдереЗ
  • 5 рдЕрдирд┐рд╢реНрдЪрд┐рдд рдереЗ (рд╡рд┐рд╡рд┐рдз рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдкреИрдЯрд░реНрди рдпрд╛ рдЕрдиреНрдп mitigations рдХреЗ рд▓рд┐рдП рд░рдХреНрд╖рд╛рддреНрдордХ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдмреНрд░реЗрдХ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рдерд╛)ред

рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐, рдХреЗрд╡рд▓ 70% рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рд╢реАрд░реНрд╖ 70 рдкреИрдХреЗрдЬреЛрдВ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдП рдереЗред

рдпреЗ рдкреНрд░рддрд┐рд╢рдд рд╕реНрдЯреИрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ NuGet.org рдкрд░ 229,536 рдкреИрдХреЗрдЬ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рд╣рдордиреЗ NuGet.org рдореЗрдВ рдХреБрд▓ рдкреИрдХреЗрдЬ рдФрд░ рдХреБрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо 229,536 рдореЗрдВ рд╕реЗ 539 рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рднрд╛рд╡рд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ 0.24% рд╣реИред

рдФрд░ рдЬрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдирдЧреЗрдЯ рдХреЗрд╡рд▓ C # рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрдВрд╢ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдХреЛрдб рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рддреЛ рдП) рдмрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдмреА) рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рдерд╛, рдЬрдмрдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╡рд┐рд░рд╛рдо рд╣реИ рдЬреЛ рдХрд┐ рдЗрдирдкреБрдЯ рдкрдврд╝рддреЗ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреВрдирд┐рдХреНрд╕ рдкрд░ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ (рдЬреЛ рдХрд┐ рдЖрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

.NET рдХреЛрд░ рдФрд░ .NET 5+ рдореЗрдВ, рд╣рдо OS рдХреЗ рдкрд╛рд░ рдирд┐рд░рдВрддрд░рддрд╛ рдХреА рдУрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рд╕рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рд╣рдо рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдореНрдкрд┐рдЯрд┐рд╢рди рд░рдирдЯрд╛рдЗрдо рд╕реНрд╡рд┐рдЪ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

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

рдЗрд╕ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ, рд░реЛрд╕рд▓рд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХреЛрдб рдЗрд╕реЗ рдХреИрд╕реЗ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреА рд╕рднреА рдореВрд▓реНрдпрд╡рд╛рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╣рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо .NET 6 рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрдиреБрднрд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ: https://github.com/dotnet/runtime/issues/43956

рдЪреВрдБрдХрд┐ рд╣рдо рдпреВрдирд┐рдХреНрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд▓рд╛рдЗрди рдПрдВрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрдж рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо .NET 5.0 рдХреЗ рд▓рд┐рдП \r\n рдХреЗрд╕ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред .x рдЬреЛ рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪрд╛рд░ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдВрддрд░ рднреА рд╣реИ:

Console.WriteLine("com/test/test/test/a/b/╩╣$╩╣".IndexOf("$"));
Console.WriteLine("com/test/test/test/a/b/╩╣$╩╣".IndexOf('$'));
-1
24

@ mattleibow рд╡рд░реНрдг рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдХреНрд░рдорд┐рдХ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред Doc https://docs.microsoft.com/en-us/dotnet/api/system.string.indexof?view=net-5.0#System_String_IndexOf_System_Char_ рдЬреЛ This method performs an ordinal (culture-insensitive) search ред рдпрджрд┐ рдЖрдк рдХреНрд░рдорд┐рдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ред

C# Console.WriteLine("com/test/test/test/a/b/╩╣$╩╣".IndexOf("$", StringComparison.Ordinal));

~ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CA1307 рдХреЗрд╡рд▓ indexof(char) рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди indexof(string) ред рдХреНрдпрд╛ string рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рдпрдо рд╣реИ? рдпрд╣ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ char рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдСрд░реНрдбрд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ string рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд┐рдирд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреБрдЫ рдорд╛рдорд▓реЗред ~

~ рдЖрдк indexof(string) рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ? ~

рдорд┐рд▓рд╛, рдпрд╣ CA1310 рдХрд╛ рдирд┐рдпрдо рд╣реИред рд╣рдорд╛рд░реЗ рдбреЙрдХреНрд╕ https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/globalization-icu#use -nls -n-of-icu рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд┐рдиреНрдирддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЙрди рдбреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

galvesribeiro picture galvesribeiro  ┬╖  185рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░: 'System.Net.Http.WebRequestHandler'ред рд╡реНрдпреБрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдпрд╛ рддреЛ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкрд╣реБрдВрдЪ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХрдо рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
clairernovotny picture clairernovotny  ┬╖  191рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Drawaes picture Drawaes  ┬╖  143рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

syeshchenko picture syeshchenko  ┬╖  199рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jamesqo picture jamesqo  ┬╖  182рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ