カスタム属性を使用したプロパティの取得: 効率的なアプローチ
.NET でリフレクションを使用する場合、多くの場合、型とそのメンバーをイントロスペクトする必要があります。特定の情報にアクセスするため。一般的なシナリオには、特定のカスタム属性でマークされたプロパティのリストを取得することが含まれます。このタスクは GetCustomAttributes() メソッドを使用して実行できますが、より効率的で簡潔なメソッドが存在します。
MyAttribute 属性を持つプロパティを取得することを目的とした次のコード スニペットを考えてみましょう。
foreach (PropertyInfo prop in t.GetProperties()) { object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true); if (attributes.Length == 1) { //Property with my custom attribute } }
このアプローチは正しく機能しますが、不必要なオブジェクトのインスタンス化が発生します。 GetCustomAttributes() メソッドは属性インスタンスの配列を返しますが、これには追加のメモリ割り当てとオーバーヘッドが必要です。
このコードを最適化するには、例に示すように、Where() メソッドと Attribute.IsDefined() メソッドを利用できます。以下:
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
この改訂されたコード スニペットは、Attribute.IsDefined() を使用して次の存在を確認することで効率を大幅に向上させます。属性オブジェクトをインスタンス化せずに属性を取得します。 Where() メソッドはプロパティのコレクションをフィルタリングし、指定された述語を満たすプロパティのみを返します。
このアプローチは、コードを合理化するだけでなく、不必要なオブジェクトの作成を回避することでメモリ消費を最小限に抑えます。カスタム属性でマークされたプロパティを取得するための、より効率的で洗練されたソリューションを提供します。
以上が.NET でカスタム属性を使用してプロパティを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。