1

メソッドの動作に問題があり、正しい方法で実行しているかどうか確信が持てません。私がしたいのは、ボタンクリックでフォームから文字列をクラスに送信し、エラーのためにそこで処理し(tryparseメソッド)、boolvalueを送信して、ユーザーにレポートとエラーを送信するか、入力をリストボックス。

これは、文字列をクラスに送信することになっているフォーム コードです。

private void btnOK_Click(object sender, EventArgs e)
{
     Errorcheck.GetDouble(numChoice);
}

次に、Errorcheck クラス:

public static bool GetDouble(string numChoice, out double value, double minLimit, double maxLimit)
{
     while (!double.TryParse(numChoice, out value))
     {
          if ((value >= minLimit) && (value <= maxLimit))
          {
              return true;
          }
      }
      return false;
}

Errorcheckクラスからブール値を取得するにはどうすればよいですか? 大丈夫かどうか。私は正しい方法でやっていますか、それとももっと簡単な方法がありますか?

4

2 に答える 2

2
private void btnOK_Click(object sender, EventArgs e)
{
   double foo;
   var myresult = Errorcheck.GetDouble(numChoice, out foo, 1, 2);

   //When myresult == true, foo contains the parsed value
}

myresultGetDouble によって返された結果が含まれますtrue(値を解析でき、制限内にある) またはfalse(値を解析できたが制限外であったか、そもそも解析に失敗した)。また、解析が失敗した場合foo は 0 が含まれます。それ以外の場合は、解析された値 (これは、またはそうでない可能性があります! ) は制限内にあります。

ただし、コードにはいくつか問題があります。初め; なぜあなたのクラスは名前が付けられErrorcheckているのに、実際にはエラーチェックを行わず(とにかくそれは何ですか?)、値を解析します。

次に、なぜ while() 構文を使用するのでしょうか?

public static bool GetDouble(string numChoice, out double value, double minLimit, double maxLimit)
{
    return double.TryParse(numChoice, out value)
             && ((value >= minLimit) && (value <= maxLimit));
}

三番; GetDouble() は実際には「double」を「取得」しません。値が double として解析可能かどうかをチェックし、そうであれば境界内にあるかどうかをチェックします。ピートのために bool を返します。 編集スクラッチ。outメソッドの署名を見逃しました。bool と値を返します。

...そしてもう少しですが、私はつまらないかもしれません:P

最後になりましたが、これが「ブール値と変数がクラス/フォーム間でどのように送信されるか」と関係があるのか​​ わかりませんか?

私のよく考えたアドバイスを参考にして、プログラミングに関する優れた C# または一般的な本を入手し、基本的なスキルを少し磨いてください。あなたは恩恵を受けるだけであり、すぐにあなたのコードが炎を意図したものではなく、多くの点で「悪い」理由を理解するでしょう.

于 2012-07-17T21:15:42.520 に答える
1

私はそのようにします:

private void btnOK_Click(object sender, EventArgs e)
{
    double parsedValue;
    if (Errorcheck.IsDoubleBetween(numChoice, out parsedValue, maxValue, minValue))
    {
        //Your code here
    }
}

エラーチェックコード:

public static bool IsDoubleBetween(string numChoice, out double value, double minLimit, double maxLimit)
{
    bool result = double.TryParse(numChoice, out value) && (value >= minLimit) && (value <= maxLimit);

    return result;
}

ご覧のとおり、いくつかの変更があります。

  1. 名前IsDoubleBetweenはメソッドのロジックを説明しています。
  2. IsDoubleBetween正しいパラメーターを使用したへの呼び出しがあります。
  3. IsDoubleBetween戻り値の使用があります。
  4. IsDoubleBetweenコードがより読みやすくなります。

この場合、2 つの操作を 2 つのメソッドに分離しようとIsDoubleBetweenするので、それぞれに単一の責任があります-値間の解析とチェック

于 2012-07-17T21:23:41.793 に答える