ホームページ > バックエンド開発 > C++ > ブール演算子や拡張メソッドを使用せずに、C# で型がサブタイプであるか、別の型と同一であるかを確認するにはどうすればよいですか?

ブール演算子や拡張メソッドを使用せずに、C# で型がサブタイプであるか、別の型と同一であるかを確認するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-09 15:11:46
オリジナル
312 人が閲覧しました

How Can I Check if a Type is a Subtype or Identical to Another Type in C# Without Boolean Operators or Extension Methods?

ブール演算子や拡張メソッドを使用せずに、C# で型がサブタイプであるか、別の型の同じ型であるかを判断するにはどうすればよいですか?

C# の

Type.IsSubclassOf メソッドは、型が別の型のサブクラスであるかどうかを効果的にチェックできます。ただし、型が全く同じ場合はfalseを返します。これにより、型がサブクラスであるか、または基本クラス自体と同一であるかを判断しようとするときに問題が発生する可能性があります。

いくつかの方法とその制限

いくつかの方法が存在しますが、それぞれの方法には制限があります。

  1. Type.IsSubclassOf:

    • サブクラスのチェックには機能しますが、型が同じ場合は失敗します。
  2. Type.IsAssignableFrom:

    • は質問に答えることができますが、継承または型の同一性が実際には存在しないのに存在することを示す誤検知を与える可能性もあります。
  3. 「is」および「as」演算子:

    • オブジェクト参照が必要であり、型オブジェクトを直接操作することはできません。

結論

残念ながら、追加のチェックを行わずに適切なソリューションを提供する方法はありません。完全な答えを得るには、次のコードが必要です:

<code class="language-csharp">typeof(Derived).IsSubclassOf(typeof(Base)) || typeof(Derived) == typeof(Base);</code>
ログイン後にコピー

または、より簡潔にメソッドとして記述します:

<code class="language-csharp">public bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase;
}</code>
ログイン後にコピー

以上がブール演算子や拡張メソッドを使用せずに、C# で型がサブタイプであるか、別の型と同一であるかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート