Ein Schalterausdruck oder eine Case-Bezeichnung muss bool (oder ...) sein

8

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%     
NoviceToDotNet 16.08.2013, 17:13
quelle

4 Antworten

6

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%     
Ehsan 16.08.2013, 17:18
quelle
6

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.

    
Reed Copsey 16.08.2013 17:20
quelle
3

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.

    
ChrisF 16.08.2013 17:20
quelle
2

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:

%Vor%

Wenn Sie diese Informationen kennen, können Sie Ihren Code folgendermaßen schreiben, um die Eigenschaft BackColor in einem Switch zu verwenden:

%Vor%     
avanek 16.08.2013 18:06
quelle

Tags und Links