首页 > 后端开发 > C++ > 如何在 C# 中有效地从单个字符串中拆分命令行参数?

如何在 C# 中有效地从单个字符串中拆分命令行参数?

Mary-Kate Olsen
发布: 2025-01-15 11:54:43
原创
783 人浏览过

How to Effectively Split Command-Line Parameters from a Single String in C#?

C#中高效分割单字符串命令行参数的方法

在C#中,获取传递给可执行文件的命令行参数数组是一项关键任务。当参数以单个字符串形式提供时,我们需要一种方法来提取各个参数,类似于C#直接在命令行中指定参数时的处理方式。本文介绍了一种自定义分割方法来实现此目的。

C#中没有标准函数可以根据特定条件分割字符串,因此我们定义了自己的扩展方法Split

<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller)</code>
登录后复制

此方法接受一个函数作为参数,该函数确定何时分割字符串。在我们的例子中,我们使用lambda表达式:

<code class="language-csharp">Func<char, bool> controller = c =>
{
    if (c == '\"')
        inQuotes = !inQuotes;

    return !inQuotes && c == ' ';
};</code>
登录后复制

此函数检查双引号和空格以确定分割点。双引号包含可能包含空格的参数,因此需要特殊处理。

分割字符串后,我们使用TrimMatchingQuotes扩展方法进一步处理结果参数,删除任何前导或尾随双引号:

<code class="language-csharp">public static string TrimMatchingQuotes(this string input, char quote)</code>
登录后复制

结合这些方法,我们创建了SplitCommandLine函数,该函数接受包含命令行参数的字符串并返回字符串数组:

<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine)
{
    return commandLine.Split(controller)
                      .Select(arg => arg.Trim(' ').TrimMatchingQuotes('\"'))
                      .Where(arg => !string.IsNullOrEmpty(arg));
}</code>
登录后复制

此函数根据指定的条件分割字符串,修剪任何空格,并删除任何周围的双引号。生成的字符串数组准确地表示C#生成的命令行参数。

为了演示其功能,我们提供了一些测试用例:

<code class="language-csharp">Test(@"/src:""C:\tmp\Some Folder\Sub Folder"" /users:""[email protected]"" tasks:""SomeTask,Some Other Task"" -someParam",
             @"/src:""C:\tmp\Some Folder\Sub Folder""", @"/users:""[email protected]""", @"tasks:""SomeTask,Some Other Task""", @"-someParam");</code>
登录后复制

通过使用这些自定义分割函数,我们可以有效地从C#中的单个字符串中提取命令行参数,从而能够根据需要使用它们。

以上是如何在 C# 中有效地从单个字符串中拆分命令行参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板