忽略 Convert.ToDecimal 和 return 中的点 0
Ignore dots in Convert.ToDecimal and return 0
我在 linq 中使用 Convert.ToDecimal
,有时数量值以点 (.) 的形式出现,因为用户可能想写 .50 或其他东西,一旦他们输入(使用手机上的数字键盘)值,代码正在执行并抛出 exception
.
我得到 string is not correct format exception
以下代码
var enteredAmountInTenders = TenderListCollection.Sum(x => Convert.ToDecimal(string.IsNullOrEmpty(x.Amount) ? "0" : x.Amount));
如何忽略上面代码的点而只得到 0?
您可以在为 TenderListCollection
中的对象设置 属性 之前检查此项。
private string _amount = "0";
public string Amount
{
get
{
return _amount;
}
set
{
if(!string.IsNullOrEmpty(value))
{
if(value != ".")
{
_amount = value;
}
}
}
}
通常我不喜欢将金额存储为字符串,所以我也建议将金额重命名为 GivenAmount
并有一个金额 属性 这是一个小数,这样我们的代码就干净了而且您不需要在 Lambda 表达式中进行解析。
我会使用 decimal.TryParse
而不是 Convert.ToDecimal
来转换值。
var enteredAmountInTenders = TenderListCollection
.Sum(x => !decimal.TryParse(x.Amount,out var result) ? 0 : result);
我在 linq 中使用 Convert.ToDecimal
,有时数量值以点 (.) 的形式出现,因为用户可能想写 .50 或其他东西,一旦他们输入(使用手机上的数字键盘)值,代码正在执行并抛出 exception
.
我得到 string is not correct format exception
以下代码
var enteredAmountInTenders = TenderListCollection.Sum(x => Convert.ToDecimal(string.IsNullOrEmpty(x.Amount) ? "0" : x.Amount));
如何忽略上面代码的点而只得到 0?
您可以在为 TenderListCollection
中的对象设置 属性 之前检查此项。
private string _amount = "0";
public string Amount
{
get
{
return _amount;
}
set
{
if(!string.IsNullOrEmpty(value))
{
if(value != ".")
{
_amount = value;
}
}
}
}
通常我不喜欢将金额存储为字符串,所以我也建议将金额重命名为 GivenAmount
并有一个金额 属性 这是一个小数,这样我们的代码就干净了而且您不需要在 Lambda 表达式中进行解析。
我会使用 decimal.TryParse
而不是 Convert.ToDecimal
来转换值。
var enteredAmountInTenders = TenderListCollection
.Sum(x => !decimal.TryParse(x.Amount,out var result) ? 0 : result);