我有这个代码旨在将空小数值转换为“零”值:
decimal paymentTot = TryConvertToDecimal(boxPaymentAmount.Text);
if ((null == paymentTot) || (paymentTot < 0))
{
paymentTot = 0M; // or simply 0?
}
private decimal TryConvertToDecimal(String incoming)
{
decimal result = 0.0M;
try
{
result = Convert.ToDecimal(incoming);
}
catch
{
; // nada
}
return result;
}
它编译,但我得到这个警告:“表达式的结果始终为'false',因为'decimal'类型的值永远不等于'decimal'类型的'null''”
我不想告诉我什么。我需要进行什么样的测试来安抚警告发射器,更重要的是,当它是意图时,我认为我的代码可以等同于'true'?
decimal
是一个值类型,它不能为null。
如果你想要一个可以为null的十进制数,那么使用Nullable<decimal>
或decimal?
这是decimal
类型的包装器(尽管它仍然是一个值类型)。
您还可以将解析方法设置为:
private Nullable<decimal> TryConvertToDecimal(String incoming)
{
Nullable<decimal> returnValue = null;
decimal result;
if (decimal.TryParse(incoming, out result))
{
returnValue = result;
}
return returnValue;
}
如果要在解析中忽略异常,最好使用decimal.TryParse
。
你不需要自己的转换器,而是使用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot))
paymentTot = 0;
你可能想从Nullable<decimal>返回decimal?
(简写TryConvertToDecimal
),因为decimal是一个不可为空的值类型。
private decimal? TryConvertToDecimal(String incoming)
{
try
{
return Convert.ToDecimal(incoming);
}
catch
{
return null;
}
}
var paymentTot = TryConvertToDecimal(boxPaymentAmount.Text);
if (!paymentTot.HasValue || paymentTot.Value < 0)
{
paymentTot = 0;
}
但请注意,按惯例,TryXXX
函数返回bool
并使用out
参数在成功时返回已解析的值。其中一个内置于框架中的是decimal.TryParse,您可能希望使用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot) || paymentTot < 0)
paymentTot = 0;
如果解析失败或解析后的值<0,则默认为0,如问题中所指定。我建议这很可能是你正在寻找的解决方案。