0

Google やその他のスタック オーバーフローUse of unassigned local variableエラーを調べましたが、まだ答えが見つかりません。ExtractionCtrlのスコープを誤用していることが私のエラーの原因であると思います。スコープをテストするためにこのコードを試してみましたが、うまくいきました。だから私は今私の間違いがどこにあるのかわからない。

スコープのテスト

namespace RandomTesting
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int x = 5;

            switch (x)
            {
                case 2:
                    System.Console.WriteLine("Your # is 2");
                    break;

                case 5:
                    System.Console.WriteLine("Your # is :{0}", x);
                    x = x + 2;
                    System.Console.WriteLine("Your # is :{0}", x);
                    break;
            }

            System.Console.WriteLine("Your # is :{0}", x);
            Console.ReadLine();
        }
    }
}

メインコードの一部

switch (arg)
{
    case "AR":
        ExtractionCtrl = new ARExtractionController();

        // add new mapping here
        break;

    case "ICN":
        ExtractionCtrl = new IcnExtractionController();

        // add new mapping here
        break;
}

int ticketID;
if (int.TryParse(arg, out ticketID))
{
    string returnedFilePath = ExtractionController.GetStartupPath();
    ExtractionCtrl.Extract(ticketID, returnedFilePath, AR_TEMPLATE_PATH, MAPPING_PATH);
}
4

3 に答える 3

4

ExtractionCtrl を設定するスイッチにはデフォルトのケースがないため、スイッチ後に ExtractionCtrl が初期化されていない可能性があります。ExtractionCtrl の宣言が表示されていないため、初期化なしで宣言されていると想定しています。

SomeExtractionCtrlType ExtractionCtrl;

したがって、エラー。

于 2012-09-24T19:42:53.253 に答える
1

Visual Studioでは、これは非常に一般的なコンパイル時エラーです。これは、変数が呼び出される前に変数が初期化されない可能性があるとコンパイラーが判断することを意味します。他の回答が言うように、あなたがすべきことはdefaultケースを追加することですが、変数を宣言するときにnull、またはで設定した値に変数を初期化することもできますdefault。Visual Studioは残念ながら非常に扱いにくいものであり、すべての潜在的なパスが最終的に値を付与するわけではありません。

于 2012-09-24T19:47:35.867 に答える
1

defaultにブロックが必要になる可能性が最も高いですswitch

switch (arg)
{
    case "AR":
        ExtractionCtrl = new ARExtractionController();

        // add new mapping here
        break;

    case "ICN":
        ExtractionCtrl = new IcnExtractionController();

        // add new mapping here
        break;
    default:
        ExtractionCtrl = new DefaultExtractionController();
        break;
}

またはExtractionCtrl、定義時に初期化することもできます。defaultしかし、私はそのオプションがもっと好きです。

于 2012-09-24T19:43:37.707 に答える