2012-07-17 115 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