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
Lepaskan: 2025-01-15 11:41:48
asal
811 orang telah melayarinya

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<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>

Salin selepas log masuk

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<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>

Salin selepas log masuk

Rentetan baris perintah boleh dipisahkan menggunakan kaedah ini:

1

<code class="language-csharp">string[] parameterArray = SplitCommandLine(parameterString).ToArray();</code>

Salin selepas log masuk

Contoh penggunaan

Contoh berikut menunjukkan penggunaan kaedah di atas:

1

2

3

4

5

6

7

8

<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>

Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan