2011-08-01 3 views
2

첫째 :이 두 기능을 하나로 변환하는 방법은 무엇입니까?

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

왜 이러한 방법을 결합하고 싶습니까? 그들은 두 가지 분리 된 일을합니다. 이들을 결합하면 모든 종류의 최고의 코딩 표준을 위반하게됩니다. –

+0

@Ramhound : 나는 염두에 두어야 할 것은 문자열 매핑이 두 가지 방법으로 정의되어 있는데, 이는별로 드라이하지 않다는 것입니다. 하지만 OP가 더 분명했을 수도 있습니다. –

+0

@Ramhound, 나는 당신과 동의한다 – Mediator

답변

4

. 그러면 코드에서 'a'가 'ATM'과 쌍을 이룬다는 코드에서 두 곳의 중복을 줄일 수 있습니다.

앞으로 변환하려면 사전에 색인을 생성하십시오. return _dict[adapterServer];.

편집 : 예외를 throw하는 대신 잘못된 입력에 대해 null을 반환하려면 TryGetValue 여야합니다. 뒤로, 사용 LINQ를 들어

:

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

당신은/뒤로 더 자주 사용되는지에 따라, 앞으로 사전 인덱싱 LINQ보다 빠른 앞으로 무엇을 교환 할 수 있습니다.

+0

+1은 비슷한 것을 게시 할 예정이다. 입력 값에서 결과 값으로의 일대일 매핑과 모호한 일대일 매핑이있는 경우에만이 옵션을 사용할 수있다. 그 방법을 계속 따로 두십시오. – BrokenGlass

+0

+1 나 자신과 같은 생각. 단순히 사용법에 따라 (실제로 예제가 단순하고 실제로 수백 가지 값이 있습니까?) 두 가지 사전에 저장하여 검색 속도를 최적화하는 것이 좋습니다. 그러나 위 예제의 네 가지 값이라면 제안 된대로 (또는 Tuple ) Dictionary에 저장하면됩니다. –

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

당신이 가지고있는 것은 맵 데이터 구조이지만, 유감스럽게도 .net은 맵 데이터 구조를 제공하지 않습니다. 만약 당신이 정말로 regulary 이런 종류의 일을 걱정하고 있다면, 당신은 기성품지도를 구글 수 있습니다. 당신은 또한 자신 만의 구현을 할 수 있습니다 : generic dictionary로 시작하고 모든 메소드를 오버라이드하여 "value"측이 고유한지 확인하고 "reverse"lookup을위한 두 번째 indexer 속성을 추가하십시오. jdv-Jan de Vaan의 솔루션은 이것에 가깝습니다 !

관련 문제