2011-08-10 7 views
1

VS2010 Expressを使用すると、C#およびWinFormsアプリケーションです。解析にこだわる

ここでは、入力が文字列であり、整数に変換されたint.Parse(aTextBox.Text)を使用する3つのテキストボックス(aTextBox、bTextBox、cTextBox)があります。その後

料金を計算して、再度結果を得るためのテキストボックスが含まれている結果のグループボックス上の特定のTextBoxにいくつかの数学の後に結果を表示するために起こっているボタン(calcBtn)メソッド...

問題がによって引き起こしています私が構文解析しているやり方、あるいはそれが実行されている順序。テキストボックスのいずれかが満たされている場合、結果は表示され、例外の形式で取得されません。私はすべてのテキストボックスを解析していて、そのうちの1つが空の場合は例外が発生するため、ここで私は立ち往生しています。コンパイラは、空の文字列を空のテキストボックスから解析しようとしていると思います。

私が何を意味するか知っていれば教えてください。 :)

ここでGUIが enter image description here

答えて

2

どのように見えるかInt32.Parse方法は、不正な形式の文字列を受け入れていない、これは空の文字列が含まれます。私には2つの提案があります。

あなたは、文字列が最初に空/空白であるかどうかをチェックし、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; 
} 

なし任意のif、TryParse設定値t以降0失敗した場合は0

関連する問題