0

NuGet 包 CommandLineParser 有一些我不明白的地方。这是我第一次看到这个?

我先给大家展示一下:

在此处输入图像描述

在我的 Auto Watch 框架的左侧,我可以看到 Value 属性。但是,在右侧,在即时窗口中我无法访问它。这怎么可能。解析后如何使用这个包并读取我的值路径?

result.Value
error CS1061: 'ParserResult<Options>' does not contain a definition for 'Value' and no accessible extension method 'Value' accepting a first argument of type 'ParserResult<Options>' could be found (are you missing a using directive or an assembly reference?)

这个监视文件夹在做什么我没有做什么?

4

2 回答 2

1

通过深入研究源代码,您可以看到它ParserResult<T>是一个抽象类。.

WithParsed扩展方法检查 是否是的ParserResult具体类型Parsed,调用委托并返回它https://github.com/commandlineparser/commandline/blob/master/src/CommandLine/ParserResultExtensions.cs

因此,现在您正在使用抽象基类而不是实现,这就是为什么您不能只是这样做result.Value,因为该属性不是位于基类上,而是位于实现上。

我的猜测是自动手表可以知道实际类型并向您显示整个对象,而即时窗口则不能。

要使用.Value,您可以将其转换为Parsed<Options>

于 2021-06-23T05:34:17.567 回答
0

本项目中使用了使用此 CommandLineParser 的确切示例:https ://www.dropbox.com/s/nhq9os8dd9fim9u/FloorplanTransformation-3D-Walls.rar?dl=0

这是一个视觉工作室项目,检查一下你会得到更好的理解。

顺便说一下,这里是一个简短的解释:

  1. 您将必须创建 Parser 类的实例。
Parser parser = Parser.Default; 
  1. 然后解析参数执行以下操作
PraserResult<object> parser_result = parser.ParseArguments<MeshGenerateOptions, MorphologicalTransformOptions, other options>(args)

这里我们有类 MeshGenerateOptions 和 MorphologicalTransformOptions 属性 [Verb]

  1. 现在执行以下操作为每个解析的参数调用相应的回调函数
parserResult.WithParsed<MeshGenerateOptions>(VerbHandlers.HandleGenerateMesh);
            parserResult.WithParsed<MorphologicalTransformOptions>(VerbHandlers.HandleMorphologicalTransform);

这里,VerbHandlers 是一个不太感兴趣的静态类,HandleGenerateMesh 和 HandleMorphologicalTransform 是在解析相应动词时调用的回调函数。

您将获得如何使用上述项目的演示,您可以观看教程:https ://www.youtube.com/watch?v=MNILyflAxdY&t=21s但这只是用于构建和使用上述项目。

于 2021-06-23T06:04:27.303 回答