プロが教えるわが家の防犯対策術!

同じ質問で昔以下の回答がありましたが、今はライブラリが進歩しているようなので、より新しい構文を使った書き方がありましたら、是非ご教授いただければと思います。

delegate bool Execute( string oprand );

class Entry {

 static bool aaa(string op)
  { System.Console.WriteLine("aaa "+op); return true; }
 static bool bbb(string op)
  { System.Console.WriteLine("bbb "+op); return true; }
 static bool ccc(string op)
  { System.Console.WriteLine("ccc "+op); return true; }

 static public void Main() {
  System.Collections.Generic.Dictionary<string,Execute> map =
   new System.Collections.Generic.Dictionary<string,Execute>();

  map["AAA"] = aaa;
  map["BBB"] = bbb;
  map["CCC"] = ccc;

  map["BBB"]("argument");

 }
}

宜しくお願い致します。

A 回答 (1件)

汎用デリゲートを使う (Action系やFunc系),コレクション初期化子など,2008で追加された機能を使って書き換える程度でしょうか。



class Entry
{
 static bool aaa (string op) { System.Console.WriteLine("aaa " + op); return true; }
 static bool bbb (string op) { System.Console.WriteLine("bbb " + op); return true; }
 static bool ccc (string op) { System.Console.WriteLine("ccc " + op); return true; }

 static public void Main ()
 {
  var map = new System.Collections.Generic.Dictionary<string, Func<string, bool>> // varによるコンパイル時型推論,Func汎用デリゲート
  { // コレクション初期化子
   { "aaa", aaa },
   { "bbb", bbb },
   { "ccc", ccc },
  };

  map["bbb"]("argument");
 }
}
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
汎用デリゲート、コレクション初期化子、varによるコンパイル時型推論ですね。
役に立ちました。ありがとうございました。

お礼日時:2013/04/23 06:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!