8
ads = ads.Where(x => (x.Amount - x.Price) / (x.Amount / 100) >= filter.Persent);

如果 x.Amount == 0 我有错误“遇到除以零错误。”

像我这样的要求是避免吗?

更新:

这有帮助,但我不喜欢这个决定:

ads = ads.Where(x => (x.Amount - x.Price) / ((x.Amount / 100)==0?0.1:(x.Amount / 100)) >= filter.Persent);

还有另一种方法吗?

4

2 回答 2

28

当然,你总是可以实现一个通用的安全划分方法,并一直使用它

using System;

namespace Stackoverflow
{
    static public class NumericExtensions
    {
        static public decimal SafeDivision(this decimal Numerator, decimal Denominator)
        {
            return (Denominator == 0) ? 0 : Numerator / Denominator;
        }
    }

}

我选择了十进制类型,因为它解决了我知道的所有不可为空的数字类型。

用法:

var Numerator = 100;
var Denominator = 0;

var SampleResult1 = NumericExtensions.SafeDivision(Numerator , Denominator );

var SampleResult2 = Numerator.SafeDivision(Denominator);
于 2012-11-06T22:08:47.353 回答
10
ads = ads.Where(x => x.Amount != 0 &&
                    (x.Amount - x.Price) / (x.Amount / 100) >= filter.Persent);
于 2012-04-20T09:18:03.863 回答