改造 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;
}
}