我有一个十进制字段
[Display(Name = "DeductedTax")]
[Required(ErrorMessage = "*")]
public decimal DeductedTax { get; set; }
现在在If语句中我想将它与零进行比较,实际上我想检查Deducted Tax
是零还是空或不是
if (payRoll.DeductedTax <= 0)
{
if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "A+")
{
payRoll.DeductedTax = payRoll.EmployeeSalary * 15 / 100;
payRoll.EmployeeSalary -= payRoll.DeductedTax;
}
else if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "A")
{
payRoll.DeductedTax = payRoll.EmployeeSalary * 10 / 100;
payRoll.EmployeeSalary -= payRoll.DeductedTax;
}
else if (payRoll.PayRollEmployee.EmployeeSalary.PayGrade == "B")
{
payRoll.DeductedTax = payRoll.EmployeeSalary * 5 / 100;
payRoll.EmployeeSalary -= payRoll.DeductedTax;
}
}
为什么我无法将其与null({1}}和零if (payRoll.DeductedTax <= 0)
进行比较?我该怎么做才能完成我想要的操作?
答案 0 :(得分:2)
声明:
public decimal? DeductedTax { get; set; }
使用:
if (payRoll.DeductedTax.HasValue && payRoll.DeductedTax.Value <= 0)
答案 1 :(得分:1)
您的decimal DeductedTax
必须声明为Nullable type
public decimal ? DeductedTax { get; set; }
在这种情况下,它可以包含十进制可以包含的所有可能数字+它可以具有Null值。
如果这不是您所要求的,请澄清。
答案 2 :(得分:1)
decimal
是一种不可为空的类型,因此,即使您可以将其与null
进行比较,也没有意义。如果尚未设置该属性,则它将获得小数的默认值,即0
(从技术上讲,它是0.0M
)。
因此,检查0
是否有效地检查了您的要求。
如果您要求它允许空值,那么您可以使用以下方法之一使其可以为空:
public Nullable<decimal> DeductedTax { get; set; }
public decimal? DeductedTax { get; set; }//this is just shorthand for the first
答案 3 :(得分:1)
您可以将decimal?
用作 nullable type 。
[Display(Name = "DeductedTax")]
[Required(ErrorMessage = "*")]
public decimal? DeductedTax { get; set; }
对于可空类型,值类型具有其值,并且还具有附加 null
值。因此,在此声明之后,您可以检查它们是否为null
。
只是提示:decimal?
等同于Nullable<decimal>
。
答案 4 :(得分:0)
奇怪的是,这个东西在清洁然后构建解决方案后工作,我不知道为什么,但它确实发生了
if (payRoll.DeductedTax == 0)