2010-05-19 6 views
5

ich die Nummer eines Monats zurückgeben möchten, und ich machte eine Funktion, aber es gibt immer 0Wie die Nummer eines Monats in C# Funktion zurück

dies ist mein Code:

public int getNrMonth(String s) 
    { 
     int nr=0; 
     if (s.Equals("January")) 
      nr = 1 
     if (s.Equals("February")) 
      nr = 2; 
     return nr; 


    } 

Could Jemand sagt mir bitte, was ist falsch? Ich bin ein Anfänger!

+0

Versuchen Sie "Januar" mit "Januar" zu vergleichen? – Gabe

+1

Es ist keine Antwort auf Ihr Problem, aber Sie sollten einen Blick auf DateTimeFormatInfo.MonthNames nehmen, die ein String-Array des Monats für die aktuelle Kultur zurückzukehren. Dann können Sie den Index verwenden, um Ihre Monat Nummer von Ihrem Monatsnamen zu erhalten: http: //msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.monthnames%28v=VS.71%29.aspx – JoeBilly

Antwort

5

Es wäre besser, es so zu tun:

switch (s.Trim().ToUpper()) 
{ 
    case "JANUARY": return 1; 
    case "FEBRUARY": return 2; 
    // etc. 
} 

return 0; 

Gründe:

  1. switch optimiert ist, mit zu beginnen (kleiner Punkt, aber erwähnenswert).
  2. Sobald Sie den Wert haben, alle übrigen if Kontrollen sind sinnlos.
  3. Angenommen, Sie wollen "Januar" und "Januar" und "Januar" und "jaNuarY" alle 1 zurückgeben, werden die Trim() und ToUpper() Anrufe dafür sorgen.
12

Warum würden Sie nicht verwenden, die in Funktion gebaut:

DateTime.ParseExact(monthName, "MMMM", CultureInfo.CurrentCulture).Month 

Hier ist ein Beispiel zur Anwendung:

How to parse a month name (string) to an integer for comparison in C#?

+0

Ich denke du bist verwirrt? 'Month.toInt' ist keine eingebaute Funktion. Das OP in der Frage, zu der du verlinkt hast, hat gefragt, ob es etwas gibt, wie * das; Die tatsächlich angenommene Antwort schlägt vor, 'DateTime.ParseExact' zu verwenden. –

+0

Es gibt keine "Month.toInt" -Operation. Sie suchen nach der Eigenschaft 'DateTime.Month'. –

+0

Zu viele Dinge eingeben, sorry für die Verwirrung. Ich habe bearbeitet, um korrekt zu sein. – Avitus

1

OK, du bist ein Anfänger, aber Sie haben Sie immer noch Werkzeuge zur Verfügung. Setzen Sie einen Breakpoint und durchlaufen Sie den Debugger. Sehen Sie sich den Wert s und nr so an wie Sie. Beachten Sie, welche if Anweisungen den nr = Teil ausführen und was nicht. Dann wirst du es verstehen. Wie es aussieht, glaube ich nicht, dass Sie Ihren echten Code eingefügt haben, weil Ihre Frage einen Semikolon fehlt und nicht einmal kompilieren könnte.

0

Versuchen Sie, diese Probe:

 string value = "June"; 
    DateTime result; 
    bool ok; 
    ok = DateTime.TryParseExact(value, "MMMM", 
        CultureInfo.CurrentCulture, DateTimeStyles.None, out result); 
    if (ok) 
    { 
     int monthNumber = result.Month; 
     Console.WriteLine(monthNumber); 
    } 
0

Warum es die einfache und leichte Art zu tun, wenn Sie sie für die lange, komplizierte LINQ Weise tun können!

int GetMonthNumber(string month) 
    { 
     return System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthNames 
      .Select((m, i) => new { Month = m, Number = i + 1 }) 
      .First(m => m.Month.ToLower() == month.ToLower()) 
      .Number; 
    } 
Verwandte Themen