忽略 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);