ブール演算子や拡張メソッドを使用せずに、C# で型がサブタイプであるか、別の型の同じ型であるかを判断するにはどうすればよいですか?
C# のType.IsSubclassOf
メソッドは、型が別の型のサブクラスであるかどうかを効果的にチェックできます。ただし、型が全く同じ場合はfalse
を返します。これにより、型がサブクラスであるか、または基本クラス自体と同一であるかを判断しようとするときに問題が発生する可能性があります。
いくつかの方法とその制限
いくつかの方法が存在しますが、それぞれの方法には制限があります。
Type.IsSubclassOf:
Type.IsAssignableFrom:
「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 サイトの他の関連記事を参照してください。