Parse()クラッシュします!使用するTryParse()
- がまたは他の非整数の
argようなものに等しい場合、例外をスローします。/t:=Maxint.Parse(arg)
int.Parse()不必要に2回(さらに!)呼び出しています。
したがって、次のように変更する必要がありますif-else。
...
int argInt;
if(int.TryParse(arg, out argInt) && ...)
{
array[i] = new ComputeParam(argInt);
}
else
...
あなたの答え:
オプション1:outパラメーター
メソッド定義を以下に変更し、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ですか?
- リターンタイプが
objectsではなくsの配列であるのはなぜComputeParamですか?
- なぜ10個の要素の配列を作成し、1つだけ配置するのですか?
上記のコードは、回答に応じて大幅に変更される可能性があります。