Parse()
会崩溃!采用TryParse()
- 如果
arg
等于/t:=Max
或任何其他非整数, int.Parse(arg)
则将抛出异常。
- 您
int.Parse()
不必要地调用了两次(甚至更多!)。
因此,您应该将您的更改if-else
为:
...
int argInt;
if(int.TryParse(arg, out argInt) && ...)
{
array[i] = new ComputeParam(argInt);
}
else
...
您的答案:
将方法定义更改为下面,并time
按照您的方式进行设置:
public object[] Dispatch(string arg, out int time)
选项 2:将返回值封装在对象中
定义一个如下所示的类,并返回它的一个实例:
class DispatchReturn
{
object[] array;
int time;
}
然后返回它:
public DispatchReturn Dispatch(string arg)
选项 3:更改解析器类。不!
您可以将array
和都time
放在解析器中作为字段,但要避免它!它违反了关注点分离。
包起来
public ComputeParam[] Dispatch(string arg, out time)
{
if (arg == null)
throw new ArgumentNullException("arg");
ComputeParam[] array = new ComputeParam[1];
int argInt;
if (int.TryParse(arg, out argInt) && 0 <= argInt && argInt <= 20)
{
array[0] = new ComputeParam(argInt);
time = 0; // You must always set an out param
}
else if (arg.StartsWith("/t")
{
time = new Options().Option(arg);
}
return array;
}
你应该回答这些问题:
- 有什么作用
i
?这总是等于0
吗?
- 为什么你的返回类型是 s 的数组
object
,而不是ComputeParam
s?
- 为什么要为10 个元素创建数组并只放置一个?
上面的代码可以根据您的答案进行重大更改。