首页 新闻 会员 周边

请教各位园友,我想把以下三个简单的方法合并为一个,求支招!

0
悬赏园豆:50 [已解决问题] 解决于 2012-11-01 17:01

请教各位园友,我想把以下三个方法合并为一个,太冗余了!

有什么好办法?

可以用泛型实现吗?

 

 

     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;
        }
战斗力的主页 战斗力 | 初学一级 | 园豆:157
提问于:2012-10-29 18:01
< >
分享
最佳答案
1

函数:

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),
    });
收获园豆:30
方外老和尚 | 菜鸟二级 |园豆:361 | 2012-10-29 19:28

我去试试

先谢过啦!

战斗力 | 园豆:157 (初学一级) | 2012-10-29 19:33

@Code Monk:这种写法的确很不错!

向高手致敬!thanks

战斗力 | 园豆:157 (初学一级) | 2012-10-30 00:05
其他回答(5)
0

mark

二楼三楼的都可行……

ms_water | 园豆:510 (小虾三级) | 2012-10-30 08:41
2

如果你单纯做数据转换,真没必要多此一举。系统已经封装的转换你再封装一次,华而不实。

一个函数的本质就是处理逻辑,是一个行为,是一个动作。没有任何内容的封装真不如不封装。

照这样写,你是不是应该把所有的赋值也抽个共通?与或非也可以抽了。

收获园豆:10
中文代码 | 园豆:951 (小虾三级) | 2012-10-30 08:44

是的,说的在理。谢谢!

支持(0) 反对(0) 战斗力 | 园豆:157 (初学一级) | 2012-10-31 10:01
0

二楼三楼的都可行

jason2013 | 园豆:1998 (小虾三级) | 2012-10-30 08:59
0

if语句,case语句

chenping2008 | 园豆:9836 (大侠五级) | 2012-10-30 10:15
0

不是有Convert类吗。

干嘛自己写。

 

如果非要合并, 除了if, switch, 还可以用多态。 

undefined | 园豆:898 (小虾三级) | 2012-10-30 19:08

多态的写法是怎样的?

支持(0) 反对(0) 战斗力 | 园豆:157 (初学一级) | 2012-10-31 09:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册