Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Berkesan daripada Rentetan Tunggal dalam C#?
Cara memisahkan parameter baris arahan rentetan tunggal dengan cekap dalam C#
Dalam C#, mendapatkan tatasusunan argumen baris perintah yang dihantar kepada boleh laku ialah tugas yang kritikal. Apabila parameter disediakan sebagai rentetan tunggal, kami memerlukan cara untuk mengekstrak parameter individu, sama seperti cara C# mengendalikan parameter apabila ia dinyatakan secara langsung pada baris arahan. Artikel ini menerangkan kaedah pembahagian tersuai untuk mencapai matlamat ini.
Tiada fungsi standard dalam C# untuk memisahkan rentetan berdasarkan keadaan tertentu, jadi kami menentukan kaedah sambungan kami sendiri Split
:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
Kaedah ini menerima sebagai argumen fungsi yang menentukan masa untuk memisahkan rentetan. Dalam kes kami, kami menggunakan ungkapan lambda:
<code class="language-csharp">Func<char, bool> controller = c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; };</code>
Fungsi ini menyemak petikan berganda dan ruang untuk menentukan titik perpecahan. Petikan berganda melampirkan hujah yang mungkin mengandungi ruang dan oleh itu memerlukan pengendalian khas.
Selepas membelah rentetan, kami menggunakan kaedah sambungan TrimMatchingQuotes
untuk memproses lagi parameter yang terhasil, mengalih keluar sebarang petikan berganda di hadapan atau di belakang:
<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
Menggabungkan kaedah ini, kami mencipta fungsi SplitCommandLine
yang menerima rentetan yang mengandungi argumen baris arahan dan mengembalikan tatasusunan rentetan:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { return commandLine.Split(controller) .Select(arg => arg.Trim(' ').TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
Fungsi ini memisahkan rentetan berdasarkan kriteria yang ditentukan, memangkas sebarang ruang putih dan mengalih keluar sebarang petikan berganda di sekelilingnya. Tatasusunan rentetan yang terhasil dengan tepat mewakili argumen baris arahan yang dijana oleh C#.
Untuk menunjukkan kefungsiannya, kami menyediakan beberapa kes ujian:
<code class="language-csharp">Test(@"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam", @"/src:""C:\tmp\Some Folder\Sub Folder""", @"/users:""[email protected]""", @"tasks:""SomeTask,Some Other Task""", @"-someParam");</code>
Dengan menggunakan fungsi split tersuai ini, kami boleh mengekstrak argumen baris perintah dengan berkesan daripada rentetan tunggal dalam C#, membolehkan kami menggunakannya mengikut keperluan.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Berkesan daripada Rentetan Tunggal dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!