2011-08-10 179 views
1

使用VS2010 Express,C#及其WinForms應用程序。解析陷阱

這裏我有三個文本框(aTextBox,bTextBox,cTextBox),其中Inputs是字符串,然後使用int.Parse(aTextBox.Text)轉換爲整數。

那麼問題是通過使按鈕(calcBtn)方法,該方法是要計算費用,然後顯示一些數學上這又包含了結果的文本框結果GROUPBOX特定文本框後的結果...

我解析的方式或它執行的順序。如果任何文本框被填充,則結果應該顯示,而不是格式異常。在這裏,我陷入了困境,因爲在calcBtn裏我解析了所有的文本框,如果其中一個是空的,那麼會發生異常。編譯器是我想要解析空文本框中的空字符串,我不希望它是。

任何建議,如果你明白我的意思? :)

這裏的GUI是什麼樣子 enter image description here

回答

2

Int32.Parse方法不接受畸形字符串,這包括空字符串。我有兩個建議。

您可以檢查是否字符串爲空/空白第一,並返回0或一些其他默認值:

private static int ParseInteger(string str) 
{ 
    if (str == null || str.Trim() == "") 
     return 0; 

    // On .NET 4 you could use this instead. Prior .NET versions do not 
    // have the IsNullOrWhiteSpace method. 
    // 
    // if (String.IsNullOrWhiteSpace(str)) 
    // return 0; 

    return Int32.Parse(str); 
} 

或者你可以簡單地忽略所有的解析錯誤,將它們視爲0。這會把事情如"","123abc""foobar"爲零。

private static int ParseInteger(string str) 
{ 
    int value; 
    if (Int32.TryParse(str, out value)) 
     return value; 

    return 0; 
} 

您採取的方法取決於您的應用程序的具體需求。

+0

沒有決策聲明的任何可能性? –

+0

@Jasmine Appelblad爲什麼你不想使用if語句? – Odnxe

+0

@Odnxe這是來自講義的練習,它不包含決定主題,也是我講師的要求。 –

3

您可以使用擴展方法...

1)方法

public static class TE 
{ 
    public static int StringToInt(this string x) 
    { 
     int result; 
     return int.TryParse(x, out result) ? result : 0; 
    } 
} 

2)使用

System.Windows.Forms.TextBox t = new System.Windows.Forms.TextBox(); 
int x = t.Text.StringToInt(); 
0

你可以簡單地做:

private static int ParseInteger(string str) 
{ 
    int value; 
    Int32.TryParse(str, out value); 
    return value; 
} 

無任何如果自TryParse設置值t如果它失敗,則爲0