如何测试 null 的小数?
How can I test a decimal for null?
我有这段代码旨在将 null 十进制值转换为 "zero" 值:
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;
}
编译成功,但我收到警告:"The result of the expression is always 'false' since a value of type 'decimal' is never equal to 'null' of type 'decimal?'"
我不理解它试图告诉我的内容。我需要什么样的测试来安抚警告发射器,更重要的是,确保我的代码可以等同于 'true' 当这是意图时?
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
return 一个 Nullable<decimal> (shorthand decimal?
),因为 decimal 是不可为 null 的值类型。
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
函数 return bool
并在成功时使用 out
参数 return 解析值。框架内置的其中之一是 decimal.TryParse,您可能想改用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot) || paymentTot < 0)
paymentTot = 0;
如果解析失败, 将默认为 0 或 如果解析的值 < 0,如您的问题中所指定。我建议这很可能是您正在寻找的解决方案。
您不需要自己的转换器,而是使用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot))
paymentTot = 0;
我有这段代码旨在将 null 十进制值转换为 "zero" 值:
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;
}
编译成功,但我收到警告:"The result of the expression is always 'false' since a value of type 'decimal' is never equal to 'null' of type 'decimal?'"
我不理解它试图告诉我的内容。我需要什么样的测试来安抚警告发射器,更重要的是,确保我的代码可以等同于 'true' 当这是意图时?
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
return 一个 Nullable<decimal> (shorthand decimal?
),因为 decimal 是不可为 null 的值类型。
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
函数 return bool
并在成功时使用 out
参数 return 解析值。框架内置的其中之一是 decimal.TryParse,您可能想改用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot) || paymentTot < 0)
paymentTot = 0;
如果解析失败,将默认为 0 或 如果解析的值 < 0,如您的问题中所指定。我建议这很可能是您正在寻找的解决方案。
您不需要自己的转换器,而是使用它:
decimal paymentTot;
if(!decimal.TryParse(boxPaymentAmount.Text, out paymentTot))
paymentTot = 0;