2012-12-04 17 views
5

Questo codice è una versione semplificata di quello che sto cercando di fare:C#: DateTime.DayOfWeek al confronto di stringhe

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

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

ho bisogno di leggere un giorno del valore settimane da un database, assegnarlo a una stringa, quindi confronta la stringa con dt.DayOfWeek per verificare se il programma deve essere eseguito.

Il mio errore è questo: " '==' operatore non può essere applicato a operandi di tipo 'string' e 'System.DayOfWeek"

Qualcuno sa come confrontare una stringa in un valore DateTime.DayOfWeek ?

+0

oggetti in C# hanno un metodo '.ToString()', la maggior parte dei built-in in realtà analizza l'oggetto in una stringa –

+0

'Ho bisogno di leggere un valore del giorno della settimana da un database 'cosa restituirebbe il DB. un numero? o una stringa? –

+0

Il DB restituisce una stringa per il valore del giorno. – Mick

risposta

9

più semplice è quello di convertire enum a stringa:

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

Note:

  • se si può cambiare il tipo di day-DayOfWeek enum si può evitare confronti di stringhe (e le relative problematiche di localizzazione/confronto).
  • se è necessario utilizzare la stringa, assicurarsi di decidere se il caso è importante o meno (vale a dire che "giovedì" deve essere uguale a DayOfWeek.Thursday) e utilizzare il corrispondente metodo String.Equals.
  • considerano la conversione di stringa enum con Parse come suggerito in altre risposte: ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • assicurarsi stringa in entrata viene sempre inglese - se potesse essere in altre lingue è necessario guardare in valore corrispondente manualmente per quello fornito in CultureInfo.DateTimeFormat.DayNames .
+0

Funziona, ed è più semplice. Grazie. – Mick

+1

Ma non è una buona pratica. È meglio controllare l'uguaglianza con enum directy – rpax

+0

@rpax - grazie. Ho aggiornato la risposta con le note. –

3

Prova DayOfWeek day = DayOfWeek.Thursday;

9

Usa Enum.Parse per ottenere il valore Enum:

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

Se non sei sicuro che sia un valore valido, c'è TryParse<T>:

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

È possibile utilizzare Enum.TryParse<DayOfWeek>:

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