嗨,我想在用户输入--dimensions之后获取两个值。
例如,当我这样做时:dotnet app.dll --dimensions 1 2
(在命令行中)
它打印
1
2
这是我追求的结果。
但是当我这样做时:dotnet app.dll --test --dimensions 1 2
它返回hi
,表示--test
有效。但是返回--dimensions
hi
Unhandled exception. System.FormatException: Input string was not in a correct format.
at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value)
at MainClass.Main(String[] args)
我不希望该参数仅在给出第一个参数时才起作用。这就是为什么我在--test
之前添加了--dimensions
当参数--dimensions
放在任何地方时,我希望它起作用。
例如dotnet app.dll --test --test --dimensions 1 2 --test
哪个应该回来
hi
hi
1
2
hi
我也是这个新手:(对不起。
代码:
using System;
class MainClass
{
private static int value1, value2;
static void Main(string[] args)
{
foreach (string value in args)
{
int for_dimensions = 0;
string testing = "--test";
if (value == "--dimensions" && args.Length >= for_dimensions + 2)
{
object test1 = args.GetValue(for_dimensions+1);
value1 = Convert.ToInt32(test1);
object test2 = args.GetValue(for_dimensions + 2);
value2 = Convert.ToInt32(test2);
Console.WriteLine(value1);
Console.WriteLine(value2);
}
if (value == testing)
{
Console.WriteLine("hi");
}
}
}
}
谢谢
答案 0 :(得分:1)
如果您不想使用现有的命令行解析器框架(由于灵活性更高,我强烈建议您使用它),例如this,则可以实现所需的输出,如下所示:
// Find array index of "--dimensions"
var argIndex = Array.IndexOf(args, "--dimensions");
// Get remaining array size (all items after "--dimensions")
var subArraySize = args.Length - argIndex - 1;
string[] subArray = new string[subArraySize];
// Put all remaining items (all items after "--dimensions") into new array
Array.Copy(args, argIndex + 1, subArray, 0, subArraySize);
// Iterate over all items after "--dimensions"
var results = new List<int>();
foreach(var entry in subArray)
{
// Check if the item is another command, if so we are finished
if(entry.StartsWith('-'))
break;
// Item isn't a command, try to parse it to int and if successful add to result set
if(int.TryParse(entry, out var numEntry))
results.Add(numEntry);
}
要输出找到的“ --dimensions”参数,只需迭代results
:
foreach(var result in results)
{
Console.WriteLine(result);
}
使用此实现,您可以处理数量可变的尺寸输入。例如您的示例1和2,或者只是1或1、2和3:
dotnet app.dll --test --test --dimensions 1 2 --test
dotnet app.dll --test --test --dimensions 1 --test
dotnet app.dll --test --test --dimensions 1 2 3 --test