请问您需要设置哪个长尾参数选项?

2026-03-30 15:021阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1380个文字,预计阅读时间需要6分钟。

请问您需要设置哪个长尾参数选项?

前两篇说到Command和Option,这篇将介绍Argument。Argument的用法和Option类似,只是其构造和属性有一些差异。Argument在运行时输入的区分也很明显,接下来我们看看如何实现。

javascript// 创建根命令var rootCmd={ name: 'root', description: '根命令', run: function(args) { console.log('运行根命令,参数:', args); }};

// 添加子命令rootCmd.addCommand('subcmd', { name: 'subcmd', description: '子命令', run: function(args) { console.log('运行子命令,参数:', args); }});

// 添加ArgumentrootCmd.addArgument('arg1', { name: 'arg1', description: '第一个参数', type: 'string', defaultValue: '默认值'});

// 添加OptionrootCmd.addOption('option1', { name: 'option1', alias: '-o', description: '第一个选项', type: 'boolean', defaultValue: false});

// 运行命令rootCmd.run(['arg1', 'value1', '--option1']);

这段代码首先创建了一个根命令`rootCmd`,然后为其添加了一个子命令`subcmd`。接着,为根命令添加了一个字符串类型的`arg1`参数和一个布尔类型的`option1`选项。最后,通过调用`run`方法运行命令,并传递参数和选项。运行结果会输出运行命令时传入的参数和选项。

  前两篇说到Command和Option,这篇说说Argument。Argument的用法和Option很像,只是他的构造和属性有些差别,再就是在运行输入时有区别,接下来看看实现。

  一个参数

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
//这里设置只有一个color参数
Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color) =>
{
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color,true);
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

  二个参数

  如果当有多个参数时:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var colorArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
//这里设置只有一个color参数
Arity = ArgumentArity.ExactlyOne,
};
//创建参数 times
var timesArgument = new Argument<int>(name: "times", description: "设置输出的次数")
{
//这里设置只有一个times参数
Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(colorArgument);
showCommand.AddArgument(timesArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color, int times) =>
{
for (var i = 1; i <= times; i++)
{
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color, true);
Console.WriteLine($"这是《旦猫》的show命令");
}
Console.ResetColor();
}, colorArgument, timesArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

参数输入值类型转换

  在第一个例子的SetHandler中,我们做了string到ConsoleColor的类型转换,其实这里可以通过参数自带的构造函数参数parse来实现类型转换。代码如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var showArgument = new Argument<ConsoleColor>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
Arity = ArgumentArity.ExactlyOne,
};
//类型转换内置方法
ConsoleColor ParseColor<ConsoleColor>(ArgumentResult result)
{
var color = result.Tokens[0].Value;
return (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.ToString(), true);
}
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor
showCommand.SetHandler((ConsoleColor color) =>
{
Console.ForegroundColor = color;
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果如下:

一个参数多个值

当一个参数多个值的时候,实现方式如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<ConsoleColor[]>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
Arity = ArgumentArity.OneOrMore,
};
//类型转换内置方法
ConsoleColor[] ParseColor<ConsoleColor>(ArgumentResult result)
{
var colors = new List<ConsoleColor>();
foreach (var color in result.Tokens)
{
colors.Add((ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.Value.ToString(), true));
}
return colors.ToArray();
}

//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor数组
showCommand.SetHandler((ConsoleColor[] colors) =>
{
foreach (var color in colors)
{
Console.ForegroundColor = color;
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果:

  想要更快更方便的了解相关知识,可以关注微信公众号

请问您需要设置哪个长尾参数选项?

本文共计1380个文字,预计阅读时间需要6分钟。

请问您需要设置哪个长尾参数选项?

前两篇说到Command和Option,这篇将介绍Argument。Argument的用法和Option类似,只是其构造和属性有一些差异。Argument在运行时输入的区分也很明显,接下来我们看看如何实现。

javascript// 创建根命令var rootCmd={ name: 'root', description: '根命令', run: function(args) { console.log('运行根命令,参数:', args); }};

// 添加子命令rootCmd.addCommand('subcmd', { name: 'subcmd', description: '子命令', run: function(args) { console.log('运行子命令,参数:', args); }});

// 添加ArgumentrootCmd.addArgument('arg1', { name: 'arg1', description: '第一个参数', type: 'string', defaultValue: '默认值'});

// 添加OptionrootCmd.addOption('option1', { name: 'option1', alias: '-o', description: '第一个选项', type: 'boolean', defaultValue: false});

// 运行命令rootCmd.run(['arg1', 'value1', '--option1']);

这段代码首先创建了一个根命令`rootCmd`,然后为其添加了一个子命令`subcmd`。接着,为根命令添加了一个字符串类型的`arg1`参数和一个布尔类型的`option1`选项。最后,通过调用`run`方法运行命令,并传递参数和选项。运行结果会输出运行命令时传入的参数和选项。

  前两篇说到Command和Option,这篇说说Argument。Argument的用法和Option很像,只是他的构造和属性有些差别,再就是在运行输入时有区别,接下来看看实现。

  一个参数

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
//这里设置只有一个color参数
Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color) =>
{
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color,true);
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

  二个参数

  如果当有多个参数时:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var colorArgument = new Argument<string>(name: "color", description: "设置输出信息的色彩")
{
//这里设置只有一个color参数
Arity = ArgumentArity.ExactlyOne,
};
//创建参数 times
var timesArgument = new Argument<int>(name: "times", description: "设置输出的次数")
{
//这里设置只有一个times参数
Arity = ArgumentArity.ExactlyOne,
};
//添加参数到show命令中
showCommand.AddArgument(colorArgument);
showCommand.AddArgument(timesArgument);
//设置命令show执行的动作,这是带上color参数,类型为string
showCommand.SetHandler((string color, int times) =>
{
for (var i = 1; i <= times; i++)
{
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color, true);
Console.WriteLine($"这是《旦猫》的show命令");
}
Console.ResetColor();
}, colorArgument, timesArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  运行结果:

参数输入值类型转换

  在第一个例子的SetHandler中,我们做了string到ConsoleColor的类型转换,其实这里可以通过参数自带的构造函数参数parse来实现类型转换。代码如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");

//创建参数 color
var showArgument = new Argument<ConsoleColor>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
Arity = ArgumentArity.ExactlyOne,
};
//类型转换内置方法
ConsoleColor ParseColor<ConsoleColor>(ArgumentResult result)
{
var color = result.Tokens[0].Value;
return (ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.ToString(), true);
}
//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor
showCommand.SetHandler((ConsoleColor color) =>
{
Console.ForegroundColor = color;
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果如下:

一个参数多个值

当一个参数多个值的时候,实现方式如下:

//创建根命令
var rootCommand = new RootCommand("这是一个命令行工具:旦猫");
rootCommand.SetHandler(() =>
{
Console.WriteLine("欢迎使用《旦猫》");
});
//创建子命令 show
var showCommand = new Command("show", "显示一些信息");
//创建参数 color
var showArgument = new Argument<ConsoleColor[]>(name: "color", description: "设置输出信息的色彩", parse: ParseColor<ConsoleColor>)
{
Arity = ArgumentArity.OneOrMore,
};
//类型转换内置方法
ConsoleColor[] ParseColor<ConsoleColor>(ArgumentResult result)
{
var colors = new List<ConsoleColor>();
foreach (var color in result.Tokens)
{
colors.Add((ConsoleColor)Enum.Parse(typeof(ConsoleColor), color.Value.ToString(), true));
}
return colors.ToArray();
}

//添加参数到show命令中
showCommand.AddArgument(showArgument);
//设置命令show执行的动作,这是带上times参数,类型为ConsoleColor数组
showCommand.SetHandler((ConsoleColor[] colors) =>
{
foreach (var color in colors)
{
Console.ForegroundColor = color;
Console.WriteLine($"这是《旦猫》的show命令");
Console.ResetColor();
}
}, showArgument);
//添加命令show到 根命令中
rootCommand.Add(showCommand);
await rootCommand.InvokeAsync(args);

  结果:

  想要更快更方便的了解相关知识,可以关注微信公众号

请问您需要设置哪个长尾参数选项?