2012-01-05 10 views
0

私のアプリケーションでは、3つの数値を引数として取るメソッドがあります。しかし、メソッドは引数として数値を取ることしかできないため、引数が数値であるかどうかを確認する必要があります。どのように私はこれを簡単で、好ましくはエレガントな方法で行うことができますか?ありがとうございます事前に引数が数値かどうかを確認する

public Triangle(double a, double b, double c) { 
     if ((a != ?) || (b != ?) || (c != ?)){ 
      throw new ArgumentException("Not a number") 
     } 
    sides = new double[] { a, b, c }; 
    } 
+1

引数として倍精度を渡していますが、数値ではないのはどうですか? –

+0

C#で引数がdouble型であるのは、数値以外のものはどうすればいいですか?数字が正でなければならない、あるいは三角不等式を満たさなければならないというわけではありませんか? – Patrick87

+0

コメディオプション:参照vb.netアセンブリを参照し、IsNumericを呼び出します。http://msdn.microsoft.com/en-us/library/6cd3f6w1(v=vs.71).aspx – asawyer

答えて

5

C#は厳密にタイプされています。したがって、パラメータが数値であることを指定すると、数値以外のパラメータでメソッドを呼び出すことはできません。

+0

Okey、私はそう考えることができます引数が数値でない場合、メソッド内に例外をスローしませんか? – holyredbeard

+0

コンパイラは、数値以外の引数を使ってメソッドを呼び出すことも許可しないため、数値以外の引数をチェックすることはできません。そうしてみると、無駄になります。 –

+0

引数が数値でない場合、コンパイルしないでください。 –

1

現在のコードサンプルでは、​​値は定義によって「数値」で、doubleと入力されています。 double値の辺のケースについては、の公開定数、つまりNaN,PositiveInfinityおよびNegativeInfinityを見てください。

あなたは値がユーザーの入力に基づいて、実際に非数値であるかどうかをテストしたい場合は、あなたの引数はstringとして入力する必要があり、あなたは彼らが数値かどうかをテストするためにDouble.TryParse(リターンbool)またはDouble.Parse(例外をスロー)を使用することができます。

+0

+1 NaN(数値ではない)が「数値ではない」場合があるため、これらの境界ケースに言及するために+1します。 NaNと直接比較することはできません(NaNとのすべての比較はfalseを返します)。代わりに 'double.IsNaN'でこれをチェックする必要があります。 –

0

C#は厳密に型指定されているため、double型は常に数値です。あなたはそれが本当に数字であるかどうかを確認する必要はありません。逆のことは起こりません。

引数が3つある場合は、それらをキャストしたり、タイプを確認したりしてください。

0

IsNaN()(数字ではありません)を使用してください。あなたのプロトタイプを持つ

if (double.IsNaN(a) || double.IsNaN(b) || double.IsNaN(c)) 
    throw new ArgumentException(...) 
+0

IsNaNを使用して、単に数値以外の「通常の」引数を評価することはできません。これは、ゼロで割るなど、結果が数学的に定義されていない操作を試した場合にのみ、真と評価されます。しかし、OPが望んでいるのは、文字列などではなく数字引数を使ってメソッドが呼び出されていることを確認することです。 –

+0

@Roy Dictus:文字列のテストについては元の質問に何も表示されませんでした。実際に、厳密に型指定された 'double'引数を使用すると、それを防ぐことができます。 –

1

public Triangle(double a, double b, double c) 

あなたはメソッドに、二重以外のものを渡そうとすると、コンパイラはエラーをスローする必要があります。フィルタテキストボックスエクステンダーと受け入れるようにそれを設定 - あなたは、文字列、たとえば、として、キーボードからの入力を読んで、あなたはそれらの文字列が倍増しているかどうかを確認する必要がある場合は、あなたは

double.TryParse(string, num); 
-1

AJAXを使用しようとを使用することができますNumbersとそれだけでは、コーディングなしで問題を解決できます。

0

あなたがダブルスに変換する必要があり、文字列を持っている場合は、テストや変換を行う過負荷をも持つことができ:

public Triangle(double a, double b, double c) { 
    sides = new double[] { a, b, c }; 
} 

public Triangle(string a, string b, string c) { 
    double aa, bb, cc; 
    if (double.TryParse(a, out aa) && double.TryParse(b, out bb) && double.TryParse(c, out cc)) { 
     sides = new double[] { aa, bb, cc }; 
    } else { 
     throw new ArgumentException("Not a number"); 
    } 
} 

しかし、コンパイラはあなたが二重に文字列を割り当てることができるようにすることはありません変数またはメソッドのパラメータ。