【发布时间】:2018-03-02 10:29:13
【问题描述】:
如果这是一个愚蠢的问题,请原谅我,但我不知道该去哪里找。我有这段代码编译得很好:
static int Main(string[] args)
{
var parserResult = CommandLine.Parser.Default.ParseArguments<Options>(args);
parserResult.WithParsed<Options>(options => OnSuccessfulParse(options));
parserResult.WithNotParsed<Options>(errs =>
{
var helpText = HelpText.AutoBuild(parserResult, h =>
{
return HelpText.DefaultParsingErrorsHandler(parserResult, h);
}, e =>
{
return e;
});
Console.WriteLine(helpText);
ReturnErrorCode = ErrorCode.CommandLineArguments;
});
return (int)ReturnErrorCode;
}
我的查询与这行代码有关:
parserResult.WithParsed<Options>(options => OnSuccessfulParse(options));
我明白,Lambda Expression 的 left 值是 => 的 value 和 right 的值是表达式。
options 到底是什么?为什么会编译?它工作得很好。但它是什么?
我不知道这是否有帮助:
根据我对这一点的理解,我可能会找错树。我承认我在这个概念上苦苦挣扎。任何解释表示赞赏。
我看到几个问题,但在我的情况下无法解释。
更新
OnSuccessfulParse 声明是:
private static void OnSuccessfulParse(Options options)
WithParsed 代码提供here
【问题讨论】:
-
好吧,大概
WithParsed<T>接受Action<T>或者Func<T, T>(我们不知道OnSuccessfulParse是什么,这没有帮助)。但是,得到的值是库的一部分——您查看过该库的代码和文档吗?这不是一般的 C# 语言问题 - 它是特定于库的。 -
options是Options类的实例,据我所知,它代表成功解析的命令行选项。因此,如果库成功将命令行选项解析为给定类 (Options),它将调用回调。该回调是您传递给WithParsed的内容。所以你的回调将被调用,然后OnSuccessfulParse方法将被调用(通过你的代码)。 -
我的理解是
options是i/p参数,以lambda表达式表示。 -
您使用的底层框架/库创建/管理
Options对象,并在某些时候将其传递给您的 lambda。 -
我从来没有提到检查
options的类型,我说检查@的值 987654344@(根据传递的值是什么[...])