改造 TryXXX Pattern

  • 719
  • 0
  • 2013-12-14

改造 TryXXX Pattern

在 .Net Framework 中可看到許多以 TryXXX 命名的方法,其模式是以回傳值表示執行過程是否成功,並透過宣告為 out 的參數傳遞處理過的結果。

此模式雖已成一典範,但還是有人不愛,所以這邊利用 Decorator Pattern 製作 TryResult 物件,來改造 TryXXX 方法,將回傳值與 out 參數包在 TryResult 物件中再回傳。

 

 

測試用的物件及測試程式


{
    static void Main(string[] args)
    {
        var r1 = "1985-02-07 23:59:59".TryParseDateTime();
        var r2 = "無心插柳柳成蔭".TryParseDateTime();
        Console.WriteLine("{0}; {1}", r1.Success, r1.Result);
        Console.WriteLine("{0}; {1}", r2.Success, r2.Result);
        Console.ReadLine();


        //輸出結果
        //True; 1985/2/7 下午 11:59:59
        //False; 0001/1/1 上午 12:00:00
    }
}

public static class Helper
{
    //舊方法
    public static bool TryParseDateTime(this string value, out DateTime result)
    {
        return DateTime.TryParse(value, out result);
    }

    //改造後的方法
    public static TryResult<DateTime> TryParseDateTime(this string value)
    {
        DateTime dummy;
        return new TryResult<DateTime>(DateTime.TryParse(value, out dummy), dummy);
    }
}

 

TryResult 物件


{
    public bool Success { get; private set; }
    public T Result { get; private set; }
    public TryResult(bool success, T result)
    {
        Success = success;
        Result = result;
    }
}