Maison > développement back-end > C++ > Comment puis-je créer, trier et filtrer des propriétés dynamiques en C# au moment de l'exécution ?

Comment puis-je créer, trier et filtrer des propriétés dynamiques en C# au moment de l'exécution ?

Linda Hamilton
Libérer: 2025-01-05 01:22:41
original
623 Les gens l'ont consulté

How can I create, sort, and filter dynamic properties in C# at runtime?

Création de propriétés dynamiques en C

Ajout et modification de propriétés dynamiques

Pour créer des propriétés dynamiques dans une classe au moment de l'exécution, vous pouvez utiliser un dictionnaire pour stocker les noms et les valeurs des propriétés. Considérez le code suivant :

Dictionary<string, object> properties = new Dictionary<string, object>();
Copier après la connexion

Ce dictionnaire peut être utilisé pour définir des propriétés dynamiques pour la classe. Par exemple, pour ajouter une propriété dynamique nommée « test » avec une valeur de 100, vous écrivez :

properties["test"] = 100;
Copier après la connexion

Tri et filtrage des propriétés dynamiques

Une fois que vous avez créé des propriétés dynamiques, vous peut également ajouter des capacités de tri et de filtrage à vos objets. Voici un exemple d'utilisation de LINQ pour le filtrage :

var filtered = from obj in objects
             where (int)obj["test"] >= 150
             select obj;
Copier après la connexion

Et voici un exemple d'utilisation d'un comparateur personnalisé pour le tri :

Comparer<int> c = new Comparer<int>("test");
objects.Sort(c);
Copier après la connexion

Exemple d'implémentation

Ce qui suit complète L'exemple de code illustre la création, la modification, le tri et le filtrage des propriétés dynamiques en C# :

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class ObjectWithProperties
    {
        Dictionary<string, object> properties = new Dictionary<string, object>();

        public object this[string name]
        {
            get
            {
                if (properties.ContainsKey(name))
                {
                    return properties[name];
                }
                return null;
            }
            set
            {
                properties[name] = value;
            }
        }
    }

    class Comparer : IComparer where T : IComparable
    {
        string m_attributeName;

        public Comparer(string attributeName)
        {
            m_attributeName = attributeName;
        }

        public int Compare(ObjectWithProperties x, ObjectWithProperties y)
        {
            return ((T)x[m_attributeName]).CompareTo((T)y[m_attributeName]);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // create some objects and fill a list
            var obj1 = new ObjectWithProperties();
            obj1["test"] = 100;
            var obj2 = new ObjectWithProperties();
            obj2["test"] = 200;
            var obj3 = new ObjectWithProperties();
            obj3["test"] = 150;
            var objects = new List(new ObjectWithProperties[] { obj1, obj2, obj3 });

            // filtering:
            Console.WriteLine("Filtering:");
            var filtered = from obj in objects
                           where (int)obj["test"] >= 150
                           select obj;
            foreach (var obj in filtered)
            {
                Console.WriteLine(obj["test"]);
            }

            // sorting:
            Console.WriteLine("Sorting:");
            Comparer c = new Comparer("test");
            objects.Sort(c);
            foreach (var obj in objects)
            {
                Console.WriteLine(obj["test"]);
            }
        }
    }
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal