1. ホーム
  2. c#

[解決済み] カスタムクラス属性ですべてのクラスを列挙するには?

2022-04-24 13:42:12

質問

に基づく質問 MSDNの例 .

スタンドアロンデスクトップアプリケーションにHelpAttributeを持つC#クラスがいくつかあるとします。このような属性を持つすべてのクラスを列挙することは可能でしょうか?このようにクラスを認識することは意味があるのでしょうか?カスタム属性は、可能なメニューオプションをリストアップするために使用され、アイテムを選択すると、そのクラスのインスタンスが画面に表示されます。クラスやアイテムの数は徐々に増えていきますが、この方法であれば、すべてを別の場所に列挙することを避けられると思います。

解決方法は?

はい、もちろんです。 Reflectionを使用します。

static IEnumerable<Type> GetTypesWithHelpAttribute(Assembly assembly) {
    foreach(Type type in assembly.GetTypes()) {
        if (type.GetCustomAttributes(typeof(HelpAttribute), true).Length > 0) {
            yield return type;
        }
    }
}