Parse()
クラッシュします!使用するTryParse()
- がまたは他の非整数の
arg
ようなものに等しい場合、例外をスローします。/t:=Max
int.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
ですか?
- リターンタイプが
object
sではなくsの配列であるのはなぜComputeParam
ですか?
- なぜ10個の要素の配列を作成し、1つだけ配置するのですか?
上記のコードは、回答に応じて大幅に変更される可能性があります。