Parse and TryParse

本文关键字:TryParse and Parse | 更新日期: 2023-09-27 17:58:59

我想知道其他人在做什么,比如解析/尝试解析小数。在PHP中,我会编写一个名为GetValueOrDefault(value,default)的方法,它接受两个参数——第一个参数是字符串或值,您希望将其解析为整数或十进制,如果失败,第二个参数是默认参数。

我想在.net上看到这样的东西,但我看到了:

  decimal salary = 0.0; //initialize salary
  if (!Decimal.TryParse(myStringValue, out salary))
      salary = 0;

所以对我来说,"Tryparse"布尔返回类型对我来说是不必要的——我没有采取任何特殊的操作,也不在乎。我想要的只是"如果转换失败,那么默认返回到我初始化的值,否则什么都不做。"

此外,我不想做Parse,因为我的理解是会抛出一个异常。我不需要尝试。。catch,因为我已经初始化了变量(我还应该在catch中做什么?我不需要在任何地方登录)。

我真的应该写一个扩展方法或助手实用程序方法来完成上面的工作吗?我觉得有一个简单的解决方案,我显然错过了。

谢谢大家!

Parse and TryParse

如果您不关心它是否被解析,那么就没有必要将它封装在if中。但是,如果失败,salary参考参数将为零。因此,在将salary初始化为零以外的值的情况下,您应该关心它是否已解析。

var salary = Decimal.TryParse(myStringValue, out var value) ? value : 0;

我总是使用一种扩展方法,与usr建议的方法非常相似,但略有不同:

public static decimal GetDecimalOrDefault(this string value, decimal defaultDecimal)
{
    try 
    {
        return Convert.ToDecimal(value);
    }
    catch(exception ex)
    {
        return defaultDecimal;
    }
}

然后你可以这样称呼它:

decimal finalValue = 0.0;
string myStringValue = "123.456";
finalValue = myStringValue.GetDecimalOrDefault(finalValue);