0

私はこのような方法を持っています:

public void Method(bool value)
{
}

ここで、文字列である xml ファイル (*.loadtest) から解析された値を使用してこのメ​​ソッドを呼び出したいと思います。

<ContextParameter Name="paratemeter" Value="True" />

だから、私は呼び出し元からこれを行う必要があります:

if(parameter.Equals("True")
    Method(true);
else
    Method(false);

Methodまたは、パラメーターとして文字列を取得してそこにチェックインするようにリファクタリングする必要がありますか?

4

9 に答える 9

4

飼うべきだと思います

  • 文字列から実際のメソッド パラメータへの変換

  • 実際の「やるべき仕事」

2 つの別々の方法で。メソッドが短く保たれるため、コードが読みやすくなります。

于 2012-11-22T12:55:43.787 に答える
3

私は使うだろうbool.Parse(string)

于 2012-11-22T12:54:28.603 に答える
2

bool.Parse入力を 100% コントロールできない限り、決して使用しないでください。

TryParseユーザー入力を処理するときは、常にメソッドを使用してください。

bool result;
if(!bool.TryParse(value, out result))
   throw new Exception("There was a problem with the config.. etc..");

Method(result);
于 2012-11-22T12:56:23.707 に答える
1

または、メソッドをリファクタリングしてパラメーターとして文字列を取得し、そこでチェックインする必要がありますか?

いいえ。単一責任。このメソッドは、パラメーター変換を行うメソッドであってはなりません。これを行うために文字列パラメーターを受け入れるオーバーロードを作成できます。これにより、ブール値を受け入れるimpmlementationが呼び出されますが、文字列以外の構成パラメーターを必要とするすべてのメソッドに対してこれを行う必要があります。

1つの場所で変換を行い、次のように呼び出すことをお勧めします。

bool param = Configuration.GetBoolParameter("ParameterName");
于 2012-11-22T12:56:51.867 に答える
1

私はできるだけ早く文字列を取り除くことを好みます。これはXMLの制限であり、メソッドの「コントラクト」に制限を転送する必要はありません。

比較に関しては、最も堅牢なのは次のようなものだと思います

var parsedBool = parameter.ToUpper() == "TRUE";
于 2012-11-22T12:57:37.780 に答える
1

オブジェクトは config によって直接入力されますか? その場合は、文字列を受け入れるようにします。それ以外の場合は、文字列を個別に解析し、「bool」パラメーター化されたメソッドを維持します。

おそらく、「True」/「False」などの有効な文字列を取得していることを確認し、そうでない場合は例外をスローします。それ以外の場合、誰かが「true」を提供し、あなたはそれを と解釈しますFALSE

(関連するポイントとして)受け入れるものに比較的寛容であることを選択できます(たとえば、空白の文字列をトリミングするなど)。

于 2012-11-22T12:56:24.123 に答える
0
Method(bool.Parse(parameter));
于 2012-11-22T12:55:07.110 に答える
0

「ブール値が必要」という契約を保持します。

XML を解析し、上記で推奨されている方法を使用してそのテキスト値を bool に変換し、それを渡します。

于 2012-11-22T12:55:54.037 に答える
0

この種の入力が bool.Parse に渡すだけで十分安全であるとは決して信じません。代わりに、負のフォールバックを使用したこの正の解析のように、より安全な方法を実行します。

bool getBoolean(string input) {
  var value = false;
  bool.TryParse(input ?? string.Empty,out value);
  return value;
}
于 2012-11-22T13:02:14.873 に答える