辞書を使用して動的オブジェクトのプロパティに効率的にアクセスします
背景:
.NET 4 で dynamic
キーワードを使用して動的オブジェクトを作成する場合、プロパティとその値の辞書を取得するのが難しい場合があります。従来のリフレクション方法では十分ではない可能性があります。
動的オブジェクトの属性:
ExpandoObject
などの .NET の動的オブジェクトは、実行時にプロパティを動的に作成します。コンパイラはこれらのプロパティを事前に認識していないため、標準的な手法を使用してこれらのプロパティにアクセスすることが困難になります。
ExpandoObject のソリューション:
幸いなことに、ExpandoObject
には簡単な解決策があります。 ExpandoObject
は IDictionary<string, object>
インターフェースを実装しているため、動的オブジェクトをこの型に直接キャストし、辞書の形式でそのプロパティにアクセスできます。
<code class="language-C#">IDictionary<string, object> propertyValues = (IDictionary<string, object>)s;</code>
ユニバーサル動的オブジェクト:
ただし、このアプローチは、 から継承しない一般的な動的オブジェクトでは機能しません。この場合、ダイナミック言語ランタイム (DLR) を利用する必要があります。これには、IDictionary<string, object>
インターフェースの使用が含まれます: IDynamicMetaObjectProvider
<code class="language-C#">var metaObject = (IDynamicMetaObjectProvider)s; var properties = metaObject.GetMetaObject(Expression.Constant(s)).GetDynamicMemberNames();</code>この方法には、より複雑な DLR 操作が含まれるため、
以外の動的オブジェクトに対して考慮する必要があります。 ExpandoObject
以上が.NET で動的オブジェクトのプロパティに効率的にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。