C# 在C语言中解析命令行选项#

C# 在C语言中解析命令行选项#,c#,.net-3.5,command-line-arguments,C#,.net 3.5,Command Line Arguments,我见过人们编写自定义类来更容易地处理各种语言的命令行选项。我想知道.NET(3.5或更低版本)是否内置了任何东西,这样您就不必自定义解析,例如: myapp.exe文件=text.txt 编辑:否。 但是人们已经建立了一些解析器,比如 可以说是最好的:这是一篇相当古老的文章,但我在所有控制台应用程序中都设计并使用了一些东西。它只是一小段代码,可以注入到单个文件中,一切都可以正常工作 编辑:这现在在上可用,并且是开源项目的一部分 它被设计成声明式和直观地使用,就像这样(另一个使用示例): 这是另

我见过人们编写自定义类来更容易地处理各种语言的命令行选项。我想知道.NET(3.5或更低版本)是否内置了任何东西,这样您就不必自定义解析,例如:

myapp.exe文件=text.txt


编辑:否。

但是人们已经建立了一些解析器,比如


可以说是最好的:

这是一篇相当古老的文章,但我在所有控制台应用程序中都设计并使用了一些东西。它只是一小段代码,可以注入到单个文件中,一切都可以正常工作

编辑:这现在在上可用,并且是开源项目的一部分

它被设计成声明式和直观地使用,就像这样(另一个使用示例):


这是另一种可能的方法。非常简单,但在过去它对我有效

string[] args = {"/a:b", "/c:", "/d"};
Dictionary<string, string> retval = args.ToDictionary(
     k => k.Split(new char[] { ':' }, 2)[0].ToLower(),
     v => v.Split(new char[] { ':' }, 2).Count() > 1 
                                        ? v.Split(new char[] { ':' }, 2)[1] 
                                        : null);
string[]args={/a:b',“/c:”,“/d”};
Dictionary retval=args.ToDictionary(
k=>k.Split(新字符[]{':'},2)[0].ToLower(),
v=>v.Split(新字符[]{':'},2).Count()>1
v.Split(新字符[]{':'},2)[1]
:空);

如果您不喜欢使用库,而简单的东西已经足够好了,您可以这样做:

string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray();
Func<string, string> lookupFunc = 
    option => args.Where(s => s.StartsWith(option)).Select(s => s.Substring(option.Length)).FirstOrDefault();

string myOption = lookupFunc("myOption=");
string[]args=Environment.GetCommandLineArgs().Skip(1.ToArray();
Func lookupFunc=
option=>args.Where(s=>s.StartsWith(option)).Select(s=>s.Substring(option.Length)).FirstOrDefault();
字符串myOption=lookupFunc(“myOption=”);

)

对于不需要任何复杂功能的快速而肮脏的实用程序,控制台应用程序通常采用以下形式的命令行:

program.exe command -option1 optionparameter option2 optionparameter
等等

在这种情况下,要获取“命令”,只需使用
args[0]

要获得选项,请使用以下内容:

var outputFile = GetArgument(args, "-o");
其中
GetArgument
定义为:

string GetArgument(IEnumerable<string> args, string option)
    => args.SkipWhile(i => i != option).Skip(1).Take(1).FirstOrDefault();
string GetArgument(IEnumerable参数,字符串选项)
=>args.SkipWhile(i=>i!=option).Skip(1).Take(1).FirstOrDefault();

Jon,我同意——在这里发布答案之前没有看到这个问题。我将把我的答案交叉张贴在那里(我很惊讶,到目前为止还没有人提到CSharpOptParse)。我的意思是内置到框架中,但谢谢。
string GetArgument(IEnumerable<string> args, string option)
    => args.SkipWhile(i => i != option).Skip(1).Take(1).FirstOrDefault();