0
using System;

namespace ConsoleApplication
{
    class Program
    {
        public delegate void mydel(int z);

        static void Main(string[] args)
        {
            Program p = new Program();

            Random r = new Random();
            int k = r.Next(99);

            mydel f;

            if (k > 50)
            {
                f = new mydel(p.high);
            }

            if (k < 50)
            {
                f = new mydel(p.low);
            }

            //f(k) is underlined and Use of unassigned local variable 'f'     
            f(k);
        }

        //methods
        public void high(int m)
        {
            Console.WriteLine("{0}>50", m);
        }

        public void low(int n)
        {
            Console.WriteLine("{0}<50", n);
        }
    }
}

デリゲートにパラメーターを指定したため、 f(k) が機能することを期待していました。このエラーが発生するのはなぜですか? (f(k) 部分で未割り当てのローカル変数 'f' を使用)

4

2 に答える 2

2

追加するだけnull

mydel f = null

または、条件の間にelseを入れます。k == 50f が初期化されていない場合:

    mydel f;

    if (k > 50)
    {
        f = new mydel(p.high);
    }
    else
    {
        f = new mydel(p.low);
    }
于 2015-10-08T11:53:39.280 に答える
2

if k > 50then f は何らかのデリゲートであり、 if k < 50- も。もしもk == 50fその場合は指定されていません(nullでなくても)-したがって、使用できません。

クイックフィックス:

mydel f = null;

しかし、あなたはいつ得ますNullReferenceExceptionk == 50; iffor case when を追加することもできk == 50ます。

于 2015-10-08T11:53:50.980 に答える