Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Cekap dalam C#?

Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Cekap dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-15 11:39:50872semak imbas

How to Efficiently Split Command-Line Parameters in C#?

Kemahiran pemisahan parameter baris arahan C#

Pengenalan

Dalam C#, mengekstrak argumen tunggal daripada rentetan tunggal yang mengandungi argumen baris arahan adalah tugas biasa. Walau bagaimanapun, mungkin tidak ada fungsi yang direka secara langsung untuk tujuan ini. Artikel ini menyelidiki teknik untuk mencapai ini menggunakan kefungsian standard atau penyelesaian tersuai.

Fungsi split standard

Malangnya, C# tidak menyediakan fungsi terbina dalam untuk memisahkan rentetan berdasarkan penilaian aksara individu. Ini bermakna kita perlu bergantung pada pendekatan yang lebih kreatif.

Penyelesaian tersuai menggunakan fungsi Lambda

Salah satu cara ialah mencipta fungsi lambda yang menentukan sama ada aksara tertentu harus membelah rentetan. Menggunakan fungsi ini, kita boleh menggunakan kaedah Split C# untuk memisahkan rentetan dengan sewajarnya. Contohnya adalah seperti 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 sambungan TrimMatchingQuotes mengalih keluar petikan yang sepadan dari permulaan dan penghujung rentetan.

Kaedah sambungan Split dan Trim Tersuai

Pilihan lain ialah melanjutkan kelas String untuk memasukkan kaedah Split yang menerima fungsi lambda sebagai input dan kaedah TrimMatchingQuotes yang mengendalikan pemangkasan petikan. Sambungan ini kelihatan seperti ini:

<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).Trim();
            nextPiece = c + 1;
        }
    }
    yield return str.Substring(nextPiece).Trim();
}

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>

Aplikasi yang komprehensif

Pendekatan ini membolehkan kami membahagikan rentetan argumen baris arahan kepada tatasusunan argumen tunggal, mereplikasi gelagat menentukan argumen secara langsung pada baris arahan.

Kesimpulan

Walaupun C# tidak mempunyai fungsi khusus untuk memisahkan argumen baris perintah, ia memberikan fleksibiliti untuk melaksanakan penyelesaian tersuai menggunakan fungsi lambda atau melanjutkan kelas String. Kaedah ini menyediakan cara yang cekap dan boleh dipercayai untuk mengekstrak parameter individu untuk pemprosesan atau pelaksanaan selanjutnya.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Parameter Baris Perintah dengan Cekap dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn