我開發周圍的TryParse一個通用的包裝,如下:如何編寫通用擴展方法?
public delegate bool ParseDelegate<T>(string s, out T result);
public static T? ParseOrNull<T>(this string value, ParseDelegate<T> parse) where T : struct
{
T result;
var parsed = parse(value, out result);
return parsed ? result : (T?)null;
}
[Test]
public void ParsesValidInt()
{
Assert.AreEqual(1234, "1234".ParseOrNull<int>(int.TryParse));
}
[Test]
public void ParsesValidDecimal()
{
Assert.AreEqual(12.34M, "12.34".ParseOrNull<decimal>(decimal.TryParse));
}
這是有點重複。有沒有辦法避免提及int.TryParse不惜一切,讓我的電話如下所示:
"1234".ParseOrNull<int>()
您是否嘗試確定泛型參數「T」的類型,然後使用適當的解析方法來代替傳入委託的類型? – Bernard 2012-02-01 16:44:06