Десятичное значение Проверить, если ноль - PullRequest
3 голосов
/ 27 мая 2009

Я пытаюсь написать метод деления, который принимает 2 параметра.

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

Теперь, если делитель равен 0, мы не можем разделить на ноль ошибок, что нормально.

Что я хотел бы сделать, это проверить, равен ли делитель 0, и если это так, преобразовать его в 1. Есть ли способ сделать это, если в моем методе много операторов if? Я думаю, что много if () s делает беспорядок. Я знаю, математически это не должно быть сделано, но у меня есть другие функции для этого.

Например:

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

Можно ли это сделать без оператора if()?

Ответы [ 4 ]

15 голосов
/ 27 мая 2009

Вы можете сделать условное выражение if следующим образом. Это то же самое, что IIF в VB.net

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

Убедитесь, что вы завернули вторую половину (), иначе вы получите ошибку деления.

12 голосов
/ 27 мая 2009

Используя оператор ?:

return (divisor == 0) ? dividend : dividend / divisor 
2 голосов
/ 27 мая 2009

Это почти то же самое, что и выражение if, но оно чище.

return dividend / divisor == 0 ? 1 : divisor;
0 голосов
/ 27 мая 2009

Вы можете создать свой собственный тип и перегрузить оператор /, чтобы получить желаемое поведение, если вы действительно этого хотите. Реализуйте операторы неявного преобразования, чтобы избежать приведения или преобразования типов.

Я не думаю, что это будет хорошей идеей, поскольку это добавит некоторые накладные расходы времени выполнения; с единственным преимуществом, что вы получаете некоторый код, который (возможно) выглядит немного чище.

...