none
Dictionary<int, Action<UIElement, EventHandler>> の初期化について RRS feed

  • 質問

  • Visual Studio 2010 SP1 の
    WPF + C# アプリケーション開発で,
    Dictionary の初期化で悩んでいます.

    private void function01(UIElement content, EventHandler e)
    {
        // 処理
    }

    private void function02(UIElement content, EventHandler e)
    {
        // 処理
    }

    という関数があるとして,Dictionary で int と紐付けしたいと考えています.
    このとき,Dictionary の宣言時に

    private readonly Dictionary<int, Action<UIElement, EventHandler>> FunctionMap = new Dictionary<int, Action<UIElement, EventHandler>>
    {
        {
            1,
            function01
        },
        {
            2,
            function02
        }
    };

    とすると,下記のように静的でないメソッドは参照できないと言われてしまいます.

    エラー    1    A field initializer cannot reference the non-static field, method, or property

    それぞれの関数内は静的ではない処理をおこなうため,
    function01 などを static で宣言することができません.
    このような場合どうしたらよいでしょうか.

    2013年12月12日 23:39

回答

  • function01は正しくは this.function01 であり、エラーメッセージの通り、フィールド初期化中には this が参照できないからでしょう。

    コンストラクター内に移動すれば初期化可能と思われます。

    • 回答としてマーク Yujiro15 2013年12月13日 2:59
    2013年12月13日 1:31

すべての返信

  • function01は正しくは this.function01 であり、エラーメッセージの通り、フィールド初期化中には this が参照できないからでしょう。

    コンストラクター内に移動すれば初期化可能と思われます。

    • 回答としてマーク Yujiro15 2013年12月13日 2:59
    2013年12月13日 1:31
  • > コンストラクター内に移動すれば初期化可能と思われます。

    あ,そうか.
    なんだかとても初歩的なことを聞いてしまいました.
    コンストラクタ内で new Dictionary をすることで解決しました.
    ありがとうございました.
    • 回答としてマーク Yujiro15 2013年12月13日 2:57
    • 回答としてマークされていない Yujiro15 2013年12月13日 2:57
    2013年12月13日 2:56