[英]How can I test a decimal for null?
我得到的这段代码旨在将空十进制值转换为“零”值:
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。
如果要使用Nullable<decimal>
为空的十进制,请使用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
。
您可能想从TryConvertToDecimal
返回Nullable <decimal> (速写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。 我建议这很可能是您正在寻找的解决方案。
您不需要为此使用自己的Converter,而是使用以下代码:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot))
paymentTot = 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.