【问题标题】:TryParse -- best practices [closed]TryParse——最佳实践[关闭]
【发布时间】:2014-01-25 11:50:55
【问题描述】:

我有一组方法,它们以字符串形式接收用户输入,并在每个方法的标题处将其解析为小数、整数等。所以,我在每种方法中都重复了很多次相同的代码,例如:

public ..... CreateOrder(....., string rawSourceAmount)
{
    decimal? sourceAmount2 = rawSourceAmount.
        TryToDecimal(XUtils.DecimalFormat(2)); // extension method, wrapper of Decimal.TryParse, returns null if fails
    if (sourceAmount2 == null)
        throw new XBadSourceAmountException(
            sourceSystem.Id, rawSourceAmount);
    decimal sourceAmount = sourceAmount2.Value;

    ..........
}

为什么我有sourceAmount2sourceAmount?因为后面方法体中我主动使用sourceAmount,不想每次都写sourceAmount.Value。有什么办法可以简化这个模板代码?

所以,任务是:我有string rawSourceAmount。我需要decimal sourceAmount 和一个抛出不同异常的地方。我不需要sourceAmount2

【问题讨论】:

    标签: c# type-conversion tryparse


    【解决方案1】:

    扔掉它并在此处阅读示例:http://msdn.microsoft.com/en-us/library/f02979c7(v=vs.110).aspx

    对于简单的值解析,您做的太过分了。

    【讨论】:

    • 好吧,好吧。你给了我@Selman22 描述的想法。谢谢。
    【解决方案2】:

    然后修改TryToDecimal方法的返回类型,改成bool,并在方法中添加out参数,即可直接查看返回结果,不需要额外定义可空变量:

    decimal sourceAmount;
    if(!rawSourceAmount.TryToDecimal(XUtils.DecimalFormat(2),out sourceAmont)
    {
       throw new XBadSourceAmountException(
            sourceSystem.Id, rawSourceAmount);
    }
    

    【讨论】:

    • 谢谢。在@pid 消息之后已经完成了相同的代码。
    猜你喜欢
    • 2013-10-02
    • 2010-10-06
    • 2011-10-28
    • 2010-09-10
    • 2011-10-11
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多