如何将这两个功能合二为一?

时间:2011-08-01 17:51:31

标签: c#

首先:

public static String ConvertServerToClientAdapter(String adapterServer)
    {
        string temp = adapterServer.Substring(0, adapterServer.IndexOf("/"));
        switch (temp)
        {
            case "f":
                {
                    return "FA";
                }
            case "g":
                {
                    return "Gi";
                }
            case "s":
                {
                    return "SE";
                }
            case "a":
                {
                    return "ATM";
                }
            default:
                return null;
        }
    }

第二

public static String ConvertClientToServerAdapter(String adapterClient)
{
    switch (adapterClient)
    {
        case "FA":
            {
                return "f";
            }
        case "Gi":
            {
                return "g";
            }
        case "SE":
            {
                return "s";
            }
        case "ATM":
            {
                return "a";
            }
        default:
            return null;
    }
}

4 个答案:

答案 0 :(得分:4)

您可以将字符串对存储在字典中。这将减少代码中两个位置的重复,即'a'与'ATM'配对。

对于正向转换,只需索引字典。 return _dict[adapterServer];

编辑:如果你想为无效输入返回null,而不是抛出异常,那么它应该是TryGetValue。

对于后退,请使用linq:

 return _dict.Elements.FirstOrDefault(e => e.Value == adapterClient).Key);

你可以根据更频繁使用的内容交换前进/后退,前向字典索引比linq更快。

答案 1 :(得分:1)

public static String Convert(String input)
{
    if (input.Contains("/"))
        switch (input.Substring(0, adapterServer.IndexOf("/")))
        {
            case "f":
                    return "FA";
            case "g":
                    return "Gi";
            case "s":
                    return "SE";
            case "a":
                return "ATM";
            default:
                return null;
        }
    }
    else 
        switch (adapterClient)
        {
            case "FA":
                    return "f";
            case "Gi":
                    return "g";
            case "SE":
                    return "s";
            case "ATM":
                    return "a";
            default:
                return null;
        }
}

答案 2 :(得分:0)

你拥有的是地图数据结构,但不幸的是.net没有提供。如果你真的担心做这种事情,你可以google一个现成的地图。您也可以实现自己的:从一个通用的Dictionary开始并覆盖所有方法以确保“值”方是唯一的,并为“反向”查找添加第二个索引器属性jdv-Jan de Vaan的解决方案接近于此!

答案 3 :(得分:-1)

    public static String ConvertServerToClientAdapter(String adapterServer)
{

    switch (adapterServer.Substring(0, adapterServer.IndexOf("/")))
    {
        case "f":
            {
                return "FA";
            }
        case "g":
            {
                return "Gi";
            }
        case "s":
            {
                return "SE";
            }
        case "a":
            {
                return "ATM";
            }
        default:
           {
             switch (adapterClient)
{
    case "FA":
        {
            return "f";
        }
    case "Gi":
        {
            return "g";
        }
    case "SE":
        {
            return "s";
        }
    case "ATM":
        {
            return "a";
        }
    default:
        return null;
}
 }
      }
     }