2012-07-17 76 views
1

我无法获得工作方法,我不确定我是否以正确的方式执行此操作。我想要做的是从button_click的表单中将字符串发送到类中,并在那里处理错误(tryparse方法)并发送一个boolvalue,然后向用户报告和错误,或者在列表框。bool值和变量如何在类/表单之间传递?

这是我应该将字符串发送到类中的表单代码。

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类的布尔值?如果没关系。我是正确的做法还是有更快捷的方法?

+5

你GetDouble方法是可怕之间检查。如果“numChoice”不是双精度值,那么您将停留在无限循环中检查值。尝试使用“if”代替,并检查minLimit和MaxLimit是否TryParse实际成功(true)。如果TryParse实际上成功地解析了numChoice中的double值,则返回false;因为“!true”等于false,while循环结束。 – Quintium 2012-07-17 21:19:32

回答

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 
} 

myresult将包含由GetDouble返回的结果要么true(值能够被解析并在限定之内)或false(值能够被解析但超出限制或失败首先解析)。另外,foowill contain 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,如果是,则在边界内。它为皮特的缘故返回一个布尔值。 编辑划痕;我错过了方法签名上的out。它返回一个布尔值也是值。

...然后一些,但我可能是挑剔的:P

而且,最后但并非最不重要的,我看不出有什么这与“值和变量如何布尔得到课间做派/形式”?

接受我的,很有意义的建议,并获得一本关于编程的良好C#或一般书籍,并略微提高您的基本技能。你只会受益,很快你就会明白为什么你的代码是,没有火焰意图,在许多方面“坏”。

+1

我相信有挑战这个的好理由:) – Quintium 2012-07-17 21:20:43

+0

感谢您的快速回复!这是给了我最多的垃圾的部分,但是课堂会做更多的这个..我希望哈哈:)我是一个完整的初学者,所以我的印象是,'虽然'将是这种类型的最佳选择代码,但我站在纠正。 :) 谢谢您的帮助!! :)) – user1501127 2012-07-17 21:25:22

+0

得到这本书,谷歌和你们,它仍然不容易;)我正在学习你:) Thnx! – user1501127 2012-07-17 22:19:52

1

我会做这样的:

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

Errorcheck代码:

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代码更具可读性。

在这种情况下,我会尽力的IsDoubleBetween这两个操作分开,两种方法等都会有一个责任到 - 解析和值

+0

为什么不只是'返回Double.TryParse'?它将为您节省一些存储的MSIL指令,然后检索结果。 – 2012-07-17 21:30:19

+0

我对原始(和这个)代码的问题之一是,“作为副作用”也会返回解析的值(这不是从你的,也不是原始的方法名)。而且,更糟的是,这个价值可能会超出界限。你需要这个返回的布尔值。 – RobIII 2012-07-17 21:31:27

+0

@ColeJohnson我通常这样做是出于调试的原因...(你可以在返回行上添加一个断点,并看到确切的返回值,而不是试图找出每个使用的布尔值) – eyossi 2012-07-17 21:31:35