簡體   English   中英

如何測試十進制為空?

[英]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類型的包裝器(盡管它仍然是值類型)

請參見: 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;
}

另外 ,如果要在解析中忽略異常,則最好使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM