如何测试小数是否为空?

B. *_*non 0 .net c# null decimal

我有这段代码旨在将空十进制值转换为“零”值:

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;
}
Run Code Online (Sandbox Code Playgroud)

它可以编译,但我收到此警告:“表达式的结果始终为“假”,因为“十进制”类型的值永远不等于“十进制”类型的“空”?”

我不明白它想告诉我什么。我需要什么样的测试来安抚警告发射器,更重要的是,确保我的代码在意图时可以等同于“true”?

Hab*_*bib 5

decimal是一个值类型并且不能为空。

如果您想要一个可为空的小数,则使用Nullable<decimal>or ,decimal?它是类型的包装器(尽管它仍然是值类型)decimal

看:Nullable<T> Structure

您还可以将解析方法设置为:

private Nullable<decimal> TryConvertToDecimal(String incoming)
{
    Nullable<decimal> returnValue = null;
    decimal result;
    if (decimal.TryParse(incoming, out result))
    {
        returnValue = result;
    }
    return returnValue;
}
Run Code Online (Sandbox Code Playgroud)

decimal.TryParse如果您要忽略解析中的异常,最好使用它。