linq 忽略Convert.ToDecimal中的点并返回0

oxalkeyp  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(119)

我在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呢?

xuo3flqw

xuo3flqw1#

我将使用decimal.TryParse而不是Convert.ToDecimal来转换值。

var enteredAmountInTenders = TenderListCollection
               .Sum(x => !decimal.TryParse(x.Amount,out var result) ? 0 : result);
mw3dktmi

mw3dktmi2#

你可以在你为你的TenderListCollection中的对象设置你的属性之前检查这个。

private string _amount = "0";

public string Amount 
{
   get 
   {
       return _amount;
   }

   set 
   {
       if(!string.IsNullOrEmpty(value))
       {
          if(value != ".")
          {
              _amount = value;
          }
       }
   }
}

一般来说,我不喜欢将金额存储为字符串,所以我也建议将金额重命名为GivenAmount,并使用小数的金额属性,这样我们的代码就干净了,您不需要解析Lambda表达式。

相关问题