1

try... catch の前に変数を宣言し、それを try ブロックに割り当てました。「fileDate」の未割り当て変数エラーが発生し続けます。

class Something
{
    string fACR = "BAK";
    int numbDays = 5;

    Public static void Main()
    {
        DateTime fileDate;
        try
        {
            fACR = args[0];
            numbDays = int.Parse(args[2]);
            fileDate = DateTime.Parse(args[1]);
        }
        catch (ArgumentException e)
        {
            Console.WriteLine("INVALID COMMAND LINE ARGUMENTS! Follow Format:");
            Console.WriteLine("<farm_acronym> <yyyy-M-d> <# days>");
            Console.WriteLine(e);
        }

        inFileName = "U:/CANSO/Engineering/Farms/" + fACR +
            "/DailyDownloads/";
        switch (fACR)
        {
            case "DEM":
                inFileName = inFileName + "Report_Recombiner_" + fileDate.ToString("yyyy-MM-dd") + 
                    ".csv";
                break;
            default:
                inFileName = inFileName + "REPORT_Recombiner_" + fileDate.ToString("yyyy-M-d") + 
                    ".csv";
                break;
        }
    }
}

宣言しながらこれを使用してみました:

DateTime fileDate = null;

それも機能しません (DateTime は null 可能ではありません)。助言がありますか?

4

3 に答える 3

0

何らかの値を割り当てる必要があります。ご指摘のとおりDateTime、参照型ではないため、null にすることはできません。したがって、無効であることがわかっているデフォルト値を割り当てるだけです-たとえば、DateTime.MinValue. 後でその値をチェックして、割り当てられているかどうかを確認できます。

もちろん、が有効な値である場合DateTime.MinValueは、他のすべての値と同様に、割り当てが行われたかどうかを確認するより堅牢な方法を使用する必要があります。たとえば、 nullable を使用します。一般に、.NET が特別な値を使用して無効なデータをマークすることは嫌われています。これは、まさに Nullable 型の目的です。DateTime?

于 2014-02-04T19:28:57.360 に答える
0

null 許容の DateTime、「DateTime?」を使用することもできます。(これは、明示的に「null値も許可するDateTime」を意味します)、またはこの場合はおそらく簡単に、作成時にDateTimeにフラグ値を割り当てるだけです。DateTime fileDate = DateTime.MinValue

もちろん、この場合、catch に戻り、fileDate を try スコープ内に配置したいだけのようです - とにかく適切に初期化されていない場合、fileDate 変数を try/catch の外のスコープに持つことは良いことです?

于 2014-02-04T19:30:29.997 に答える