2011-08-20 2 views
2

基本的に私は、Windowsフォームアプリケーションを作成して、4つのテストグレードの平均を計算しようとしています。しかし、いくつかのクラスでは、私は3つのテストしかないかもしれません。 4つのテストテキストボックスすべてに値がなければ、プログラムは平均を計算しません。私はちょうどそれを無視し、他の3私のコードは以下の通りです算出し、第四のテキストボックスがそれに何も持っていない場合はコーディングする方法を把握しようとしている:テキストボックスNULL質問

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace GradeCalc 
{ 
    public partial class Grades : Form 
    { 
     public Grades() 
     { 
      InitializeComponent(); 
     } 

     private void Submit_Click(object sender, EventArgs e) 
     { 
      double test1; 
      double test2; 
      double test3; 
      double test4; 
      double average4; 
      double average3; 

      //Here, I'm trying to achieve: 
      //if (t4 is empty) 
      //{find the average of the first 3 textboxes} 

      if (t4.Text == null) 
      { 
       test1 = double.Parse(t1.Text); 
       test2 = double.Parse(t2.Text); 
       test3 = double.Parse(t3.Text); 
       average3 = ((test1 + test2 + test3)/3); 
       tavg.Text = average3.ToString("00.00"); 
      } 
       //Here, I'm trying to achieve: 
       //if (t4 is not empty) 
       //{ calculate the average of all 4 textboxes} 

      else 
       if (t4.Text != null) 
       { 
        test1 = double.Parse(t1.Text); 
        test2 = double.Parse(t2.Text); 
        test3 = double.Parse(t3.Text); 
        test4 = double.Parse(t4.Text); 
        average4 = ((test1 + test2 + test3 + test4)/4); 
        tavg.Text = average4.ToString("00.00"); 
       } 
     } 
    } 
} 

私は多くの経験を持っていませんC#で、どんな助けでも感謝します。

答えて

3

はString.IsNullOrEmpty(t4.Text)

0

第テキストボックスの内容は、おそらくヌルちょうど空の文字列ではないではありませんしてみてください。すべての角度をカバーするために、nullとの比較ではなくString.IsNullOrEmpty()を使用できます。しかし、もし誰かが宇宙に何かを置いたらどうでしょうか?空白を削除することもできます。

代わりに、Parse - ではなくTryParseメソッドを使用し、返された成功ブール値を使用して結果の数を決定することもできます。 TryParseは、次のように機能します。

if (Double.TryParse(t4.Text, out test4)) 
{ 
    // this works 
} 
else 
{ 
    // this did not 
} 
2

この試してみてください。テキスト(T1 - T4)のいずれかがあれば、上記のコード

List<double> MyValues = new List<double>; 

double T; 

if (double.TryParse (t1.Text, out T)) 
    MyValues.Add (T); 

if (double.TryParse (t2.Text, out T)) 
    MyValues.Add (T); 

if (double.TryParse (t3.Text, out T)) 
    MyValues.Add (T); 

if (double.TryParse (t4.Text, out T)) 
    MyValues.Add (T); 

if (MyValues.Count > 0) 
    tavg.Text = MyValues.Average().ToString ("00.00"); 

は...堅牢であることがスキップされ有効な数値ではありません。 ..正しい値(1,2,3,4のいずれか)のみの平均値が計算され、有効な値が入力されていない場合が処理されます...

これは簡単に変更できます少なくとも3つの有効な数字が入力され、最後にifがに変更されることを要求する例えばである。

0

実行したいさまざまなタスクをデカップリングすることで、コードを改善できます。最初に、テキストボックス内の数値を解析したいとします。あなたは、関数を使用していることを行うことができます。

IEnumerable<Double> ParseValues(IEnumerable<TextBox> textBoxes) { 
    foreach (var textBox in textBoxes) { 
    Double value; 
    if (Double.TryParse(textBox.Text, out value)) 
     yield return value; 
    } 
} 

この関数は、TextBoxオブジェクトの入力シーケンスを取得し、無効な値を持つすべてのテキストボックスをスキップDouble値の出力シーケンスを生成します。

あなたは、コンピュータに平均値を、この機能を使用することができます。

var values = ParseValues(new[] { t1, t2, t3, t4 }); 
if (values.Any()) { 
    var average = values.Average(); 
    tavg.Text = average.ToString("00.00"); 
} 

テキストボックスのいずれか、またはすべてに有効な値が含まれている場合は、このコードでは、平均値を計算します。

0

TryParseまたはテキストボックスの内容については、他の回答を参照してください。これは単なる注釈です。

FWIW、私は、例えば、人生を容易にするためのヘルパー機能を持っている:

double val = AsDouble(txt.Text) ?? 0; 

(0をデフォルトにする番号です。)

double? AsDouble (string str) { 
    double value; 
    if (double.TryParse(str, out value)) 
    return value; 
    } else { 
    return null; 
    } 
} 

そして、それは同じくらい簡単です

ハッピーコーディング。