[英]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.