我目前正在通过以下方式计算税率
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但有点不同。
最佳答案
如果我理解正确,这就是你想要的:
var result = taxes.OrderBy(item => item.Limit)
.SkipWhile(item => item.Limit < testValue)
.FirstOrDefault()?.Value;
它会将您的集合从最小的 Limit
排序到最大的,然后 Skip
直到达到等于或大于您的 Limit
测试值
。因为集合是按 FirstOrDefault
排序的,它是值。
或者:
var result = taxes.Where(item => item.Limit >= testValue )
.OrderBy(item => item.Limit)
.FirstOrDefault()?.Value;
这种方式从不同的角度看问题。只取等于或等于 testValue
的项,然后对它们排序并取第一个。
关于c# - 在列表的上限和下限之间找到一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38912176/