首页 >后端开发 >C++ >如何在C#中高效地将命令行参数解析为字符串数组?

如何在C#中高效地将命令行参数解析为字符串数组?

Patricia Arquette
Patricia Arquette原创
2025-01-15 11:41:48772浏览

How to Efficiently Parse Command-Line Parameters into a String Array in C#?

C# 命令行参数解析成字符串数组

在C#中,经常需要将包含命令行参数的字符串分割成字符串数组。本文探讨了标准函数和推荐方法来完成此任务。

一个重要的考虑因素是处理包含空格的双引号字符串。仅仅基于空格分割字符串是不够的,因为它会错误地分割双引号字符串。

标准函数

C# 没有提供专门用于此目的的标准函数。可以使用自定义函数检查每个字符来实现此功能。

推荐方法

一种推荐的方法是使用以下代码块:

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

此方法根据一个检查引号和空格的函数分割字符串,然后修剪空格和引号。

自定义扩展方法

另一种方法是创建自定义扩展方法:

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

使用这些方法,可以分割命令行字符串:

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

示例用法

以下示例演示了上述方法的用法:

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

以上是如何在C#中高效地将命令行参数解析为字符串数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn