Maison >développement back-end >C++ >Comment accéder efficacement aux propriétés des objets dynamiques dans .NET ?

Comment accéder efficacement aux propriétés des objets dynamiques dans .NET ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-22 23:23:15735parcourir

How to Efficiently Access Properties of Dynamic Objects in .NET?

Utilisez des dictionnaires pour accéder efficacement aux propriétés des objets dynamiques

Contexte :

Lors de la création d'objets dynamiques à l'aide du mot-clé dynamic dans .NET 4, obtenir un dictionnaire de propriétés et de leurs valeurs peut être un défi. Les méthodes de réflexion traditionnelles peuvent ne pas suffire.

Attributs des objets dynamiques :

Les objets dynamiques dans .NET, tels que ExpandoObject, créent des propriétés dynamiquement au moment de l'exécution. Le compilateur ne connaît pas ces propriétés à l'avance, ce qui rend difficile leur accès à l'aide des techniques standards.

Solution pour ExpandoObject :

Heureusement pour ExpandoObject il existe une solution simple. Puisque ExpandoObject implémente l'interface IDictionary<string, object>, nous pouvons directement caster l'objet dynamique vers ce type et accéder à ses propriétés sous la forme d'un dictionnaire :

<code class="language-C#">IDictionary<string, object> propertyValues = (IDictionary<string, object>)s;</code>

Objets dynamiques universels :

Cependant, cette approche ne fonctionne pas avec les objets dynamiques génériques qui n'héritent pas de IDictionary<string, object>. Dans ce cas, nous devons tirer parti du Dynamic Language Runtime (DLR). Cela implique d'utiliser l'interface IDynamicMetaObjectProvider :

<code class="language-C#">var metaObject = (IDynamicMetaObjectProvider)s;
var properties = metaObject.GetMetaObject(Expression.Constant(s)).GetDynamicMemberNames();</code>

Cette méthode implique des opérations DLR plus complexes et doit être envisagée pour les objets nonExpandoObject dynamiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn