4

2 つのパラメーターを受け入れる除算メソッドを作成しようとしています。

public static decimal Divide(decimal divisor, decimal dividend)
{
    return dividend / divisor;
}

ここで、除数が 0 の場合、「ゼロで割ることはできません」というエラーが発生しますが、これは問題ありません。

私がやりたいことは、除数が 0 かどうかを確認し、そうであれば 1 に変換することです。私のメソッドに if ステートメントをたくさん入れずにこれを行う方法はありますか? 多くの if() が混乱を招くと思います。私は数学的にこれを行うべきではないことを知っていますが、これには他の機能があります。

例えば:

if(divisor == 0)
{
    divisor = 1;
}
return dividend / divisor;

if()宣言なしでできるの?

4

5 に答える 5

15

このような条件付き if ステートメントを実行できます。これは、VB.net の IIF と同じです。

return dividend / ((divisor == 0) ? 1 : divisor);

後半を () で囲むようにしてください。そうしないと、除算エラーが発生します。

于 2009-05-27T14:57:23.220 に答える
13

?:演算子 を使用して

return (divisor == 0) ? dividend : dividend / divisor 
于 2009-05-27T14:59:25.760 に答える
1

これは if 文とほとんど同じですが、より簡潔です。

return dividend / divisor == 0 ? 1 : divisor;
于 2009-05-27T14:57:05.890 に答える
0

本当に必要な場合は、独自の型を作成し、 / 演算子をオーバーロードして、目的の動作を得ることができます。暗黙的な変換演算子を実装して、キャストまたは型変換を回避します。

ただし、実行時のオーバーヘッドがいくらか追加されるため、これは良い考えではないと思います。唯一の利点は、(ほぼ間違いなく) 少しきれいに見えるコードを取得できることです。

于 2009-05-27T15:02:03.290 に答える