2009-05-08 4 views
3

Hallo Ich verwende enums in eine Zeichenfolge mit einem Schalter konvertiert, aber es funktioniert nicht. Es gibt Kompilierungsfehler: Kann nicht implizit Typ ‚userControl_commontop.UserType‘ zu ‚string‘ konvertierenEnum & Switch Case

Der Code ist:

private void CommonTopChangesnew(string usertype) 
{ 

    switch (usertype.Trim().ToUpper()) 
    { 
     case UserType.NORMAL : 
      hlkSAD.Enabled = false; 
      hlkMRTQuery.Enabled = false; 
      hlkReqViewer.Enabled = false; 
      hlkSendnotif.Enabled = false; 
      break; 
     case UserType.POWER : 
      hlkSAD.Enabled = false; 
      hlkReqViewer.Enabled = false; 
      hlkSendnotif.Enabled = false; 
      break; 
    } 
} 

enum UserType 
{ 
    NORMAL, 
    POWER, 
    ADMINISTRATOR 
} 
+0

Bitte Code-Fragment umformatieren; es ist derzeit nicht lesbar ... –

Antwort

3

Sie den Parameter usertype in auf einen enum-Wert mit dieser Funktion umwandeln könnte:

object Enum.Parse(System.Type enumType, string value, bool ignoreCase); 

als

UserType utEnum = Enum.Parse(UserType, userType, true); 

und dann können Sie Ihre switch-Anweisung aufrufen als:

switch (utEnum) 
    { ... } 
5

Die Aufzählung kein String ist, mehr als eine Konstante const int MY_VALUE = 1; ist eine Zeichenfolge.

Sie sollten Ihre Zeichenfolge in eine Enum ändern:

switch ((UserType)Enum.Parse(usertype, typeof(UserType))) { 
    ... 
} 
+1

Die erste Option wird wahrscheinlich nicht funktionieren, da switch erfordert, dass case-Anweisungen konstant sind. – Josh

+1

die erste Anweisung wird nicht funktionieren! –

+0

@ShaulBehr Ich weiß, das ist alt ... aber Hari ist vollkommen richtig - das erste Beispiel wird nicht funktionieren. Das liegt daran, dass switch-Anweisungen erfordern, dass die Fälle konstant sind (obwohl, wenn es einen Weg dazu gibt, würde ich sehr gespannt darauf sein, es zu hören). – Maverick

5

Sie sollten dies versuchen:

enum UserType 
{ 
    NORMAL, 
    POWER, 
    ADMINISTRATOR 
} 

private void CommonTopChangesnew(string usertype) 
{ 
    switch ((UserType)Enum.Parse(typeof(UserType), usertype, true)) 
    { 
    case UserType.NORMAL: 
     hlkSAD.Enabled = false; 
     hlkMRTQuery.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    case UserType.POWER: 
     hlkSAD.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    } 
} 
1

Ihre Funktion übernimmt einen Parameter vom Typ String und dann verwenden Sie den gleichen Parametertypen vergleichen die Enum gehören. Hier liegt der Konflikt.

Ihre Funktion sollte stattdessen sein:

private void CommonTopChangesnew(UserType usertype) 
{ 

    switch (usertype) 
    { 
    case UserType.NORMAL : 
     hlkSAD.Enabled = false; 
     hlkMRTQuery.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    case UserType.POWER : 
     hlkSAD.Enabled = false; 
     hlkReqViewer.Enabled = false; 
     hlkSendnotif.Enabled = false; 
     break; 
    } 
} 
0

Sie keinen String mit einem Enum vergleichen.

Sie sollten eine Enum an Ihre Methode übergeben.

0

Option 1: Ihre CommonTopChangesnew ändern Usertype-Enumeration als Parameter

oder

Option 2 zu akzeptieren: Verwenden Enum.Parse auf Ihren String in einer Usertype-Enumeration im Schalterblock zu konvertieren:

(Usertype) Enum.Parse (typeof (Usertype), Benutzertyp)