Nullable DateTime-Erweiterung wirft 'nicht enthalten in definition' Ausnahme

In den folgenden code:

void Main()
{
    DateTime cleanDate = DateTime.Now.ToCleanDateTime();    
    DateTime? nullableCleanDate = DateTime.Now;
    nullableCleanDate = nullableCleanDate.ToCleanDateTime();

    cleanDate.Dump();
    nullableCleanDate.Dump();
}

public static class Extensions
{
    //public static DateTime ToCleanDateTime(this DateTime dt)
    //{
    // dt = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0);
    // return dt;
    //}

    public static DateTime? ToCleanDateTime(this DateTime? dt)
    {
        if (dt.HasValue)
            dt = new DateTime(dt.Value.Year, dt.Value.Month, dt.Value.Day, 0, 0, 0, 0);
        return dt;
    }
}

Diese Zeile DateTime cleanDate = DateTime.Now.ToCleanDateTime(); wirft folgende exception.

'- System.DateTime' enthält keine definition für 'ToCleanDateTime'
und die beste Erweiterung Methode überladen
"Erweiterungen.ToCleanDateTime(System.DateTime?)' hat einige ungültige
Argumente

Wenn ich den Kommentar in der extension-Methode für DateTime public static DateTime ToCleanDateTime(this DateTime dt) Fehler wird keiner geworfen.

Könnte jemand mich aufklären mit:

  1. Warum dieser Fehler geworfen (abgesehen von den offensichtlichen)?
  2. Gibt es eine Möglichkeit, kombinieren diese zwei Erweiterungen in einer einzigen Methode?

Ich irgendwie erwartet public static DateTime? ToCleanDateTime(this DateTime? dt) zu behandeln, sowohl DateTime und DateTime?.

  • Wie Ihre Antwort sagt:DateTime ! = DateTime? weil DateTime? sich in Nullable<DateTime> durch den compiler. Seine eine ganz andere Art.
InformationsquelleAutor CrnaStena | 2015-05-28
Schreibe einen Kommentar