2012-12-04 6 views
5

Dieser Code ist eine vereinfachte Version von dem, was ich zu tun habe versucht:C#: DateTime.DayOfWeek auf String-Vergleich

string day = Thursday; 
DateTime dt = DateTime.Now; 

if (day == dt.DayOfWeek) 
{ 
    // start the program 
} 

Ich brauche einen Tag der Woche Wert aus einer Datenbank zu lesen, weisen Sie ihn eine Zeichenfolge, dann vergleichen Sie die Zeichenfolge mit dt.DayOfWeek, um zu überprüfen, ob das Programm ausgeführt werden soll.

Mein Fehler ist dies:

Wer weiß, „Operator‚==‘kann nicht auf Operanden vom Typ‚String‘und‚System.DayOfWeek angewandt werden“, wie eine Zeichenfolge an einen DateTime.DayOfWeek Wert vergleichen ? Versuchen

+0

Objekte in C# haben eine '.ToString()' Methode, die meisten der eingebauten analysieren das Objekt tatsächlich in einer Zeichenfolge –

+0

'Ich muss einen Tag der Woche Wert aus einer Datenbank lesen, was würde die DB zurückgeben. eine Zahl? oder eine Schnur? –

+0

Der DB gibt eine Zeichenfolge für den Tagwert zurück. – Mick

Antwort

9

Einfachste ist Enum in String zu konvertieren:

if (day == dt.DayOfWeek.ToString())... 

Hinweise:

  • , wenn Sie Art von day-DayOfWeek Enum ändern können Sie String-Vergleiche vermeiden können (und die damit verbundenen Probleme bei Lokalisierung und Vergleich).
  • Wenn Sie Zeichenfolge verwenden müssen, stellen Sie sicher, ob der Fall wichtig ist oder nicht (d. H., "Donnerstag" sollte gleich DayOfWeek.Thursday sein) und verwenden Sie die entsprechende Methode String.Equals.
  • betrachtet Zeichenfolge mit Parse in anderen Antworten, wie vorgeschlagen ENUM Umwandlung: ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) Englisch
  • stellen Sie sicher, eingehenden String wird immer - wenn es in anderen Sprachen könnten Sie in manuell passenden Wert auf einem in CultureInfo.DateTimeFormat.DayNames vorgesehen aussehen müssen .
+0

Das funktioniert und ist am einfachsten. Vielen Dank. – Mick

+1

Aber ist keine sehr gute Praxis. Es ist besser, die Gleichheit mit enums directy zu überprüfen – rpax

+0

@rpax - danke. Ich habe die Antwort mit Notizen aktualisiert. –

3

DayOfWeek day = DayOfWeek.Thursday;

9

Verwenden Enum.Parse den Enum-Wert zu erhalten:

if ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) == dt.DayOfWeek) 

Wenn Sie nicht sicher, dass es ein gültiger Wert ist, gibt es TryParse<T>:

Enum val; 
if (Enum.TryParse<DayOfWeek>(day, out val) && val == dt.DayOfWeek) 
2

Sie Enum.TryParse<DayOfWeek> verwenden können:

string strDay = "Wednesday"; 
DayOfWeek day; 
if (Enum.TryParse<DayOfWeek>(strDay, out day) 
    && day == DateTime.Today.DayOfWeek) 
{ 
    // ... 
}