.NET リフレクションの世界では、特定の属性で装飾されたプロパティのリストを取得することが頻繁に必要になります。ここでの質問は、AllowMultiple が false に設定されている、MyAttribute 属性を持つプロパティの識別を扱います。
提示された最初のアプローチでは、t.GetProperties() を使用してすべてのプロパティを反復処理し、その後、各プロパティの属性を調べるループが続きました。 prop.GetCustomAttributes(typeof(MyAttribute), true) を使用します。この方法は機能しますが、複数の属性インスタンスを作成する必要があるため、非効率的になる可能性があります。
LINQ の Where 拡張メソッドを活用した改良されたソリューションを次に示します。
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
このアプローチにより、属性が簡素化されます。各プロパティに対して Attribute.IsDefined を直接呼び出すことでプロセスをチェックします。これにより、必要な属性をインスタンス化せずにその存在を効率的に検証できます。これにより、特に多数のプロパティを持つ型のパフォーマンスが大幅に向上します。
さらに、結果として得られる props 変数は PropertyInfo オブジェクトの IEnumerable であるため、必要に応じてさらなるフィルタリングや操作が可能になります。
以上が特定の属性 (AllowMultiple = false) で装飾された C# プロパティを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。