2011-08-01 17 views
2

最初:これらの2つの機能を1つにするにはどうすればよいですか?

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

なぜこれらのメソッドを組み合わせたいでしょうか。彼らは2つの別々のことをする。それらを組み合わせることは、あらゆる種類の最良のコーディング標準に違反します。 –

+0

@Ramhound:文字列マッピングはDRYではない2つの方法で定義されているということを心配していると思います。しかし、OPはこれでもっとはっきりしていたかもしれません。 –

+0

@Ramhound、私はあなたに同意します – Mediator

答えて

4

あなたは辞書で文字列のペアを格納することができます。それはコードの2つの場所を持つことの重複を減らし、「a」は「ATM」とペアになっていると言います。

フォワード変換では、辞書にインデックスを付けるだけです。 return _dict[adapterServer];

編集:例外をスローするのではなく、無効な入力に対してnullを返す場合は、TryGetValueにする必要があります。あなたが辞書インデックスがLINQよりも高速で前方、前方/後方より頻繁に使用されているものに応じてあるものを入れ替えることができます

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

:後方、使​​用LINQのために

+0

+1は同様のものを投稿するつもりでしたが、入力値から結果値への明白な一対一のマッピングがある場合、これはオプションに過ぎません。方法は別にしておきます – BrokenGlass

+0

+1自分自身の考え。 (例は単純化されていて、実際には何百もの値があります)、ルックアップ速度を最適化するために2つの辞書に格納することを検討することができます。しかし、上記の例の4つの値だけであれば、示唆されているように(あるいは、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は地図データ構造を提供していません。あなたが本当にこの種の規制を行うことを心配しているなら、あなたは既製のマップをgoogleすることができます。独自の実装を実装することもできます。ジェネリックディクショナリで始まり、すべてのメソッドをオーバーライドして「値」側が一意であることを確認し、逆引き参照用の2番目のインデクサープロパティを追加します。jdv-Jan de Vaanのソリューションはこれに近い!

関連する問題