4 Stimmen

Wie speichert man den Enum-Wert in der Sitzung?

Ich erstelle eine Enum-Eigenschaft. Diese Eigenschaft soll in der Sitzung gespeichert werden. Mein Code ist hier

public enum TPageMode { Edit=1,View=2,Custom=3}

       protected TPageMode Mode { 
            get{
                if (Session["Mode"] == null)
                    return TPageMode.Edit;
                else
                {
                    return Session["Mode"] as TPageMode; // This row is problem
                }                
            }
            set {
                Session["Mode"] = value;
            } 
        }

Compiler-Freigabefehler bei return Session["Mode"] as TPageMode

The as operator must be used with a reference type or nullable type

Wenn ich diese Zeile anstelle von

return Enum.Parse(typeof(TPageMode), Session["Mode"].ToString());

Dieser Fehler wird angezeigt

Cannot implicit convert type 'object' to 'TPageMode'

Wie liest man den Enum-Wert aus der Sitzung?

9voto

Jon Skeet Punkte 1325502

Versuchen Sie dies:

return (TPageMode) Session["Mode"];

Wie die Fehlermeldung sagt, kann "as" nicht mit nicht-nullbaren Werttypen verwendet werden. Enum.Parse würde gearbeitet haben (ineffizient), wenn Sie dann auf den richtigen Typ gecastet haben:

return (TPageMode) Enum.Parse(Session["Mode"], typeof(TPageMode));

1voto

Paul Turner Punkte 37044

Der Code

return Session["Mode"] as TPageMode

gibt einen Fehler zurück, weil TPageMode ist kein Referenztyp.

Les as Operator ist eine besondere Art der reflexionsbasierten Typkonvertierung in C#. Er prüft, ob die linke Seite des Operators in den Typ auf der rechten Seite konvertiert werden kann. Wenn die Konvertierung no möglich ist, gibt der Ausdruck null zurück. Da TPageMode eine Aufzählung ist und auf Werttypen basiert, kann sie nicht den Wert Null enthalten. Daher kann der Operator in diesem Beispiel nicht verwendet werden.

Um diese Typumwandlung durchzuführen, verwenden Sie einfach

return (TPageMode) Session["Mode"];

Wenn die Konvertierung mit dieser Syntax nicht möglich ist, wird ein InvalidCastException wird von der Laufzeit ausgelöst. Verwenden Sie diese Syntax, wenn Sie sicher sind, dass die Konvertierung unter normalen Umständen immer möglich sein sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X