如何将这两个函数合二为一

本文关键字:两个 函数 合二为一 | 更新日期: 2023-09-27 18:04:15

first:

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;
    }
}

如何将这两个函数合二为一

可以将字符串对存储在字典中。这将减少代码中有两个地方表示'a'与'ATM'配对的重复。

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

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

对于反向,使用linq:

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

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

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;
        }
}

你所拥有的是一个地图数据结构,但不幸的是。net没有提供。如果你真的担心经常做这样的事情,你可以谷歌一个现成的地图。您也可以实现自己的:从一个泛型字典开始,覆盖所有方法以确保"值"端是唯一的,并为"反向"查找添加第二个索引器属性——jan de Vaan的解决方案接近于此!

    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;
}
 }
      }
     }