请教各位园友,我想把以下三个方法合并为一个,太冗余了!
有什么好办法?
可以用泛型实现吗?
private float StringToFloat(string value) { float fCompare = 0; float.TryParse(value.Trim(), out fCompare); return fCompare; } private decimal StringToDecimal(string value) { decimal dCompare = 0; decimal.TryParse(value.Trim(), out dCompare); return dCompare; } private int StringToInt32(string value) { int iCompare = 0; int.TryParse(value.Trim(), out iCompare); return iCompare; }
函数:
private T StringTo<T>(string input,Func<string,T> function) { if(string.IsNullOrWhiteSpace(input))return default(T); try { return function(input.Trim()); } catch { return default(T); } }
调用方法(decimal):
decimal dvalue=StringTo<decimal>("0.9",decimal.Parse);
(int):
int ivalue=StringTo("12",int.Parse);
(float):
var fvalue=StringTo("8.1",float.Parse);
自定义类型也是支持的(Birthday):
public struct Birthday { public int Year{get;set;} public int Month{get;set;} public int Day{get;set;} }
调用方法:
var birthday=StringTo<Birthday>("19881112",input=>new Birthday { Year=StringTo(input.Substring(0,4),int.Parse), Month=StringTo(input.Substring(4,2),int.Parse), Day=StringTo(input.Substring(6,2),int.Parse), });
我去试试
先谢过啦!
@Code Monk:这种写法的确很不错!
向高手致敬!thanks
mark
二楼三楼的都可行……
如果你单纯做数据转换,真没必要多此一举。系统已经封装的转换你再封装一次,华而不实。
一个函数的本质就是处理逻辑,是一个行为,是一个动作。没有任何内容的封装真不如不封装。
照这样写,你是不是应该把所有的赋值也抽个共通?与或非也可以抽了。
是的,说的在理。谢谢!
二楼三楼的都可行
if语句,case语句
不是有Convert类吗。
干嘛自己写。
如果非要合并, 除了if, switch, 还可以用多态。
多态的写法是怎样的?