我目前正在通过以下方式查找列表的上限和下限之间的值
int testValue = 180000;
List<TaxBracket> taxes = new List<TaxBracket>();
taxes.Add(new TaxBracket(18199, 0)); //0 to 18199
taxes.Add(new TaxBracket(36999, 19)); //18200 to 36999
taxes.Add(new TaxBracket(79999, Convert.ToDecimal(32.50D))); //37000 to 79999
taxes.Add(new TaxBracket(179999, 37)); //80000 to 179999
taxes.Add(new TaxBracket(180000, 47)); //180000
decimal result = taxes[taxes.Count-1].Value;
for (int i = 0; i < taxes.Count; i++)
{
if (i == 0)
{
if (testValue < taxes[i].Limit)
result = 0;
}
if (i > 0)
{
if (testValue < taxes[i].Limit && testValue > taxes[i - 1].Limit)
{
result = taxes[i].Value;
}
}
}
Console.WriteLine(result);
计算税率是否有LINQ任何替代做到这一点,而不是使用这种老派的做法?看起来非常接近this,但有点不同。
你能告诉我的逻辑:TaxBracket(36999,19))如何';'会'18200至36999' ,'18200'是从哪里来的? –
@不幸运 - 集合中的每个项目都是范围的顶部数字。所以第0项是用于所有的值,直到限制 - 这是18199 –
尝试以下解决方案,如果值大于表值,将返回null:decimal? result = taxes.Where(x => testValue x.Value).LastOrDefault(); –
jdweng