このswich文が動作しないのはなぜ、エラー与える:自体にスイッチ式またはケースラベルがブール値(または...)でなければなりません
switch (btn.BackColor)
{
case Color.Green:
break;
case Color.Red:
break;
case Color.Gray:
break;
}
このswich文が動作しないのはなぜ、エラー与える:自体にスイッチ式またはケースラベルがブール値(または...)でなければなりません
switch (btn.BackColor)
{
case Color.Green:
break;
case Color.Red:
break;
case Color.Gray:
break;
}
エラーで:
A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type
コードを自己説明的です。スイッチの式は、sbyte、byte、short、ushort、int、uint、long、ulong、char、stringのいずれかである必要があります。またはC#言語仕様として
exactly one user-defined implicit conversion (§6.4) must exist from the type of the switch expression to one of the following possible governing types: sbyte, byte, short, ushort, int, uint, long, ulong, char, string, or, a nullable type corresponding to one of those types.
ことを示唆しているそして、あなたはBackColorプロパティは、ここにあなたのタイプを返して、それが故に、エラーを上記のルールのいずれかを満たしていないことがわかります。
あなたは、問題は、あなたがswitch
文でColor
を使用することはできませんで、この
switch (btn.BackColor.Name)
{
case "Green":
break;
case "Red":
break;
case "Gray":
break;
}
のようにそれを行うことができます。 sbyte
、byte
、short
、ushort
、int
、uint
、long
、ulong
、char
、string
:それは、次のいずれかのタイプ、タイプのいずれか、または、またはこれらのいずれかのタイプに変換のNULL可能バージョンである必要がありますC#言語仕様、8.7.2から:
• Otherwise, exactly one user-defined implicit conversion (§6.4) must exist from the type of the switch expression to one of the following possible governing types: sbyte, byte, short, ushort, int, uint, long, ulong, char, string, or, a nullable type corresponding to one of those types.
あなたのケースでは、文字列を使用して、あるいは単にif
/else
ステートメントのセットを使用することによってこの問題を回避できます。
一体型ではないため、BackColor
をオンにすることはできません。
整数型、列挙型(事実上の整数型)、および文字と文字列のみをオンにすることができます。
BackCOlor
という固有のプロパティ(たとえば、Name
)を見つけて、それをオンにする必要があります。
他の回答が指摘したように、System.Drawing.Color
はswitch
ステートメントの使用可能なタイプではありません。 Color
は、コード内の列挙型のように動作するため、興味深いタイプですが、それは、それぞれSystem.Drawing.KnownColor
の静的プロパティを持つためです。これは列挙型です。
public static Color Green
{
get
{
return new Color(KnownColor.Green);
}
}
は、情報のこのビットを知って、あなたはスイッチでBackColor
プロパティを使用するには、このようなあなたのコードを書くことができます:あなたはコードでColor.Green
を見たときだから、ここColor
クラスは舞台裏でやっていることである
if (btn.BackColor.IsKnownColor)
{
switch (btn.BackColor.ToKnownColor())
{
case KnownColor.Green:
break;
case KnownColor.Red:
break;
case KnownColor.Gray:
break;
}
}
else
{
// this would act as catch-all "default" for the switch since the BackColor isn't a predefined "Color"
}
「btn.BackColor」の種類は何ですか? – Floremin
はボタンです。 – NoviceToDotNet
私は 'btn.BackColor'のタイプについて、特に' btn'ではなく、尋ねています。 – Floremin