Warum diese swich-Anweisung nicht funktioniert, gibt einen Fehler:
Ein switch-Ausdruck oder eine case-Bezeichnung muss ein bool-, char-, string-, integral-, enum- oder entsprechender Nullwerttyp sein
Code:
%Vor%Der Fehler an sich ist selbsterklärend. Es sagt Ihnen, dass switch Ausdruck einer dieser Typen sein muss: sbyte, Byte, kurz, ushort, int, uint, lang, ulong, char, string. oder wie die C # -Sprachspezifikation vorschlägt
Es muss genau eine benutzerdefinierte implizite Konvertierung (§6.4) vom Typ des Switch-Ausdrucks zu einem der folgenden möglichen Steuerungstypen existieren: sbyte, byte, short, ushort, int, uint, long, ulong, char, string oder ein Nullable-Typ, der einem dieser Typen entspricht.
Und Sie können sehen, dass BackColor hier Ihren a-Typ zurückgibt und es keiner der obigen Regeln entspricht, daher der Fehler.
Sie können es so machen
%Vor% Das Problem besteht darin, dass Sie in einer Color
-Anweisung kein switch
verwenden können. Es muss einer der folgenden Typen sein, eine nullfähige Version eines der folgenden Typen oder in einen der folgenden Typen konvertierbar sein: sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
, string
Aus der C # -Sprachspezifikation 8.7.2:
• Andernfalls muss genau eine benutzerdefinierte implizite Konvertierung (§6.4) vom Typ des Switch-Ausdrucks zu einem der folgenden möglichen Steuerungstypen existieren: sbyte, byte, short, ushort, int, uint, long, ulong char, string oder ein Nullable-Typ, der einem dieser Typen entspricht.
In Ihrem Fall könnten Sie dies umgehen, indem Sie Zeichenfolgen verwenden oder einfach eine Reihe von if
/ else
-Anweisungen verwenden.
Sie können BackColor
nicht einschalten, weil es kein integraler Typ ist.
Sie können nur Integer-Typen, enums (die eigentlich Integer-Typen sind) und chars und strings aktivieren.
Sie müssen eine Eigenschaft von BackCOlor
finden, die eindeutig ist (z. B. Name
) und diese aktivieren.
Wie die anderen Antworten gezeigt haben, ist System.Drawing.Color
kein verwendbarer Typ in einer switch
-Anweisung. Color
ist ein interessanter Typ, weil er sich im Code wie ein Enum verhält, aber das liegt daran, dass er eine statische Eigenschaft für jedes System.Drawing.KnownColor
, was ein Aufzählungstyp ist. Wenn Sie also Color.Green
im Code sehen, ist dies die Klasse Color
im Hintergrund:
Wenn Sie diese Informationen kennen, können Sie Ihren Code folgendermaßen schreiben, um die Eigenschaft BackColor
in einem Switch zu verwenden:
Tags und Links c#