Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghuraikan Parameter Baris Perintah dengan Cekap ke dalam Array Rentetan dalam C#?
Parameter baris arahan C# dihuraikan ke dalam tatasusunan rentetan
Dalam C#, selalunya perlu untuk memisahkan rentetan yang mengandungi parameter baris arahan ke dalam tatasusunan rentetan. Artikel ini meneroka fungsi standard dan kaedah yang disyorkan untuk menyelesaikan tugas ini.
Pertimbangan penting ialah mengendalikan rentetan petikan dua yang mengandungi ruang. Membahagikan rentetan berdasarkan ruang kosong sahaja tidak mencukupi, kerana ia akan membahagi rentetan petikan dua secara salah.
Fungsi standard
C# tidak menyediakan fungsi standard khusus untuk tujuan ini. Fungsi ini boleh dicapai menggunakan fungsi tersuai yang menyemak setiap aksara.
Kaedah yang disyorkan
Pendekatan yang disyorkan ialah menggunakan blok kod berikut:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { bool inQuotes = false; return commandLine.Split(c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; }) .Select(arg => arg.Trim().TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
Kaedah ini memisahkan rentetan berdasarkan fungsi yang menyemak petikan dan ruang, kemudian memangkas ruang dan petikan.
Kaedah sambungan tersuai
Pendekatan lain ialah mencipta kaedah sambungan tersuai:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller) { int nextPiece = 0; for (int c = 0; c < str.Length; c++) { if (controller(str[c])) { yield return str.Substring(nextPiece, c - nextPiece); nextPiece = c + 1; } } yield return str.Substring(nextPiece); } public static string TrimMatchingQuotes(this string input, char quote) { if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote)) return input.Substring(1, input.Length - 2); return input; }</code>
Rentetan baris perintah boleh dipisahkan menggunakan kaedah ini:
<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>
Contoh penggunaan
Contoh berikut menunjukkan penggunaan kaedah di atas:
<code class="language-csharp">string parameterString = @"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam foo"; string[] parameterArray = SplitCommandLine(parameterString).ToArray(); foreach (string parameter in parameterArray) { Console.WriteLine(parameter); }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Parameter Baris Perintah dengan Cekap ke dalam Array Rentetan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!