【发布时间】:2015-01-06 05:01:15
【问题描述】:
我正在使用来自 nuget 的命令行库 v 1.9.71.2。不幸的是,文档不是最新的,而且我不了解用于该库的高级 C# 语言结构,因此仅通过查看库中可用的界面,我无法提出可行的解决方案。
我的选项类如下所示:
class ProgramOptions
{
[Option('l', "spotsL", Required = true, HelpText = "Lowest stock price used for calculations.")]
public double lowestSpot { get; set; }
[Option('h', "spotsH", Required = true, HelpText = "Highest stock price used for calculations.")]
public double highestSpot { get; set; }
[Option('n', "spotsN", Required = true, HelpText = "Number of (equally distributed) stock prices [spotsL,spotsH].")]
public int spotsNumber { get; set; }
[OptionList('m', "maturities", ',', Required = true, HelpText = "Comma separated list of options maturities (as a fraction of a year).")]
public IList<string> maturities { get; set; } //we want double here.
[Option('s', "strike", Required = true, HelpText = "Strike price of options.")]
public double strikePrice { get; set; }
[Option('v', "vol", Required = true, HelpText = "Volatility used for calculation.")]
public double volatility { get; set; }
}
我只需要选项的长名称,但是当我将 null's(如文档所示)代替短名称时,会出现编译器错误。我也更希望将成熟度作为双打列表 (IList<double> maturities),但 IDK 如何实现这一点 - 我认为使用纯命令行它仅适用于 strings 列表。
第二部分是我无法将命令行args 的选项解析为ProgramOptions 对象。正在尝试类似:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(args[1]);
///Parse Command Line
var options = new ProgramOptions();
bool is_succes = Parser.Default.ParseArguments(args, options);
Console.WriteLine("parsed? {0}",is_succes);
Console.WriteLine(options.highestSpot);
Console.WriteLine(options.lowestSpot);
Console.WriteLine(options.maturities.ToString());
Console.WriteLine(options.spotsNumber);
Console.WriteLine(options.strikePrice);
Console.WriteLine(options.volatility);
Console.WriteLine("program working");
}
}
不幸的是,它不起作用并在
is_succes 变量中给出False。所有其他变量显示0。我的命令行参数是任何机会让库解析类似:
/spotsL 10 /spotsH 1000 /spotsN 9 /maturities 1,0.5,0.001 /strike 495 /vol 0.1
而10确实是由te先显示的WriteLine。
【问题讨论】:
标签: c# .net parsing command-line command-line-arguments