【C#】泛型方法的妙用

泛型允许灵活地创建类型,处理一种或多种特定类型的对象,这些类型是在实例化时确定的,不能假定该泛型对象提供了什么类型。

这里通过一实例,来例举泛型带来的好处。

项目遇到一个中英文互相翻译的情况,但由于是接口调用的关系,后台返回的结果定义的是枚举,并且枚举的种类和数量很多。例如角色枚举,运行模式枚举,用户权限枚举,用户启用枚举等等,举例:

    /// <summary>
    /// 用户启用枚举
    /// </summary>
    [Serializable]
    [DataContract]
    public enum UserEnable
    {
        [EnumMember] 用户启用 = 0,
        [EnumMember] 用户禁用 = 1,
    }

那么对应的就是英文的枚举:

    /// <summary>
    /// 用户启用枚举
    /// </summary>
    [Serializable]
    [DataContract]
    public enum UserEnable
    {
        [EnumMember] User_Disable = 0,
        [EnumMember] User_Enabled = 1,
    }

最开始的解决方式是采用switch,每一个中文枚举过来,就用case对应其中的英文字符串返回,简单直观。形如:

 

    public static string UserEnableToEnglish(UserEnable para)
    {
        string result;
        switch(para){
            case UserEnable.启用:
                 result = "Enale";break; 
            case UserEnable.禁用:
                 result = "Disale";break;
        }
        return result;
    }

这样每个枚举都要写一个这样的方法,代码将非常臃肿。既然都是枚举的转换,参照多态的思想,类似的代码逻辑肯定可以简化。于是,有了下面的泛型方法处理方式

    /// <summary>
    ///  中文转换成英文的公共方法 
    /// </summary>
    /// <typeparam name="T1"></typeparam>
    /// <typeparam name="T2"></typeparam>
    /// <param name="result"></param>
    /// <param name="EnglishStr"></param>
    public static string ConvertChineseToEnglish<T1, T2>(string result)
    {
        string englishStr = "The_result_does_not_exist";
        string[] array = Enum.GetNames(typeof(T1));
        int i = 0;
        while (i < array.Length)
        {
            if (array[i] == result)
            {
                string[] engStr = Enum.GetNames(typeof(T2));
                englishStr = engStr[i];
                break;
            }
            i++;
        }
        return englishStr.Replace("_"," ");
    }

 


最后调用方式就变成了:

 

String result = "用户禁用";
string value = ConvertChineseToEnglish<UserResult, UserResult_English>(result);

最后,这一个泛型方法,在项目中至少节省了两三百行代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值