Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghuraikan Parameter Baris Perintah dengan Cekap ke dalam Array Rentetan dalam C#?

Bagaimana untuk Menghuraikan Parameter Baris Perintah dengan Cekap ke dalam Array Rentetan dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 11:41:48817semak imbas

How to Efficiently Parse Command-Line Parameters into a String Array in 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!

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