[解決済み] 型の大文字と小文字の切り替え c# [duplicate]
質問
重複の可能性があります。
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/
関連
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み] スイッチオンタイプ」これ以上の代案はないのでしょうか?
-
[解決済み】C#のスイッチオンタイプ【重複あり
-
[解決済み] このスイッチ/パターンマッチングの考え方にメリットはあるのでしょうか?