0

以下のコード(本番コードではありません)はUse of unassigned local variable 'dateTime'、それを見ると、戻り時に変数が割り当て解除されることは決してないことがわかります。Any句でoutパラメータを返すのは悪い形式ですが、なぜコンパイルできないのですか?

 private static DateTime? ConvertStringToDateByFormat(string date) {
     DateTime dateTime;

     var acceptableDateFormats = new List<String>{
        "d/MM/yyyy",
        "d/M/yyyy",
        "d/MM/yy",
        "d/M/yy",
        "d-MM-yyyy",
        "d-M-yyyy",
        "d-MM-yy",
        "d-M-yy",
        "d.MM.yyyy",
        "d.M.yyyy",
        "d.MM.yy",
        "d.M.yy",
        "d-MMM-yyyy",
        "d-MMM-yy",
        "d MMM yyyy",
        "d MMM yy"
     };

     if (acceptableDateFormats.Any(format => DateTime.TryParseExact(date, format, CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTime))) {
        return dateTime;   
     }
     else {
        return null;
     }

  }
4

4 に答える 4

2

に渡されたラムダAnyが実行されない可能性があるため、acceptableDateFormats が空のコレクションであると想像してください。コンパイラはより賢く、それが以前に定義されていて、いくつかの値を持っていることを確認できますが、コンパイラが実行できる他の多くのことと同様に、コンパイラの開発者がそのようなことを実装するのはおそらく価値がありませんでした。

于 2013-01-04T00:55:36.957 に答える
1

@carlosfigueira の回答に追加: さらに、コンパイラは、date変数を正常に解析して変数に格納できるかどうかをコンパイル時に知ることはありませんdateTime。したがって、プログラムがステートメントdateTimeに到達したときに変数が初期化されない場合があります。return dateTime

于 2013-01-04T00:57:30.230 に答える
0

これは、.Net コンパイラがコードの構文をチェックしているためです。すでに指摘したように、dateTime オブジェクトはインスタンス化されていないため、「無効な構文」につながります。

于 2013-01-04T01:02:11.133 に答える
0

nullとにかく解析しない場合に戻るので、値を割り当てることができます

private static DateTime? ConvertStringToDateByFormat(string date)
{
    DateTime dateTime = DateTime.MinValue;
     ...
于 2013-01-04T01:02:59.247 に答える