1. ホーム
  2. c#

[解決済み] 型の大文字と小文字の切り替え c# [duplicate]

2023-02-03 05:09:43

質問

重複の可能性があります。

C# - 'switch on type'にこれより良い代替案はありますか?

こんにちは、私はクラスの型に大きなif/elseを取得すると仮定します。それはスイッチケースでそれを行う方法はありますか?

例:

function test(object obj)
{
if(obj is WebControl)
{

}else if(obj is TextBox)
{

}
else if(obj is ComboBox)
{

}

など ...

のようなものを作りたいのですが

switch(obj)
{
case is TextBox:
break;
case is ComboBox:
break;

}

}

どのように解決するのですか?

C#7をアップデートする

はい。 ソース

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

C# 7 より前のバージョン

いいえ。

http://blogs.msdn.com/b/peterhal/archive/2005/07/05/435760.aspx

<ブロッククオート

私たちはC#言語への追加機能に関する多くの要望を受け取っています。 今日は、より一般的なものの1つである「型の切り替え」についてお話します。 switch on typeはとても便利で簡単な機能のように見えます。 スイッチのような構造を追加して、値ではなく式の型をスイッチします。 式の型を切り替えるスイッチのような構造を追加することです。これは次のようなものです。 このようになります。

switch typeof(e) { 
        case int:    ... break; 
        case string: ... break; 
        case double: ... break; 
        default:     ... break; 
}

<ブロッククオート

この種のステートメントは、離散的な型階層にディスパッチなどの仮想的な ディスパッチなどの仮想メソッドを追加するのに非常に便利です。 を含む型階層にディスパッチするような仮想メソッドを追加するのに非常に便利です。このような例を見ると このような例を見て、この機能は簡単で便利であると簡単に結論づけることができるでしょう。 このような例を見ると、この機能が簡単で便利であると簡単に結論付けることができます。このような例を見ると、この機能は簡単で便利であると簡単に結論付けることができます。 怠惰なC#言語設計者たちは、なぜ私の生活を楽にするために、このシンプルで時間を節約できる言語機能を追加しないのだろう? このシンプルで時間を節約する言語機能を追加してくれないのだろうか?

残念ながら、多くの「シンプルな」言語機能のように、型スイッチは最初に見たほどシンプルではありません。 は、最初に見たときほど単純ではありません。トラブルが発生するのは このような例では、より重要であり、またそれに劣らず重要でもあります。

class C {}
interface I {}
class D : C, I {}

switch typeof(e) {
case C: … break;
case I: … break;
default: … break;
}

リンク https://blogs.msdn.microsoft.com/peterhal/2005/07/05/many-questions-switch-on-type/